2016-05-31 15 views
0

NSDataNSUserDefaultsにループで保存しようとしていますが、常にエラーが発生しています。 iがループのインデックスであるNSUserDefaultsのデータをSignal SIGABRTでクラッシュさせて保存できません

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

[defaults synchronize]; 

、それは鍵がどのような場合にはnullではないことを意味します。私も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のサイズが大きかった。私はそれをドキュメントディレクトリ内のファイルに保存することでやっています。 –

関連する問題