2016-05-31 97 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的大小很大。我已经通过将它存储在文档目录中的文件中来完成该操作。 –