2016-05-31 96 views
0

我試圖在一個循環中保存NSDataNSUserDefaults,但我不斷得到一個錯誤。無法保存與信號SIGABRT崩潰NSUserDefaults中的數據

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *index = [NSString stringWithFormat:@"alltweetsoftrend%d", i]; 
[defaults setObject:tweetData forKey:index]; 

[defaults synchronize]; 

其中i是循環的索引,這意味着密鑰在任何情況下都不爲空。我也檢查了我的NSData(tweetData),這也不是null。我只是在保存這個錯誤。

+2

那麼,例外文本說什麼? – trojanfoe

+1

你的'tweetData'確認NSCopying協議。 http://stackoverflow.com/questions/1459598/how-to-copy-an-object-in-objective-c – dayitv89

+0

@trojanfoe信號SIGABRT EXC_BAD_INSTRUCTION –

回答

1

你的代碼沒有任何內在的錯誤。 NSData太小而無法存儲,但在這種情況下,我不會真正期待SIGABRT。最可能的問題是NSData是用[NSData dataWithBytesNoCopy:length:]創建的,NSData指向的緩衝區已被釋放。可能還有其他問題也會導致問題,例如在線程之間使用共享的NSData全局變量,CFDataRefs中的錯誤類型轉換等。

嘗試編寫其他NSData並查看它是否有效。例如: NSData *tweetData = [NSData dataWithBytes:"Hello" length:6];。我敢打賭,這個問題與你的tweetData是如何創建併發送到這個代碼中有關。

+0

是的! NSData的大小很大。我已經通過將它存儲在文檔目錄中的文件中來完成該操作。 –