无法保存与信号SIGABRT崩溃NSUserDefaults中的数据
问题描述:
我试图在一个循环中保存NSData
NSUserDefaults
,但我不断得到一个错误。无法保存与信号SIGABRT崩溃NSUserDefaults中的数据
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *index = [NSString stringWithFormat:@"alltweetsoftrend%d", i];
[defaults setObject:tweetData forKey:index];
[defaults synchronize];
其中i
是循环的索引,这意味着密钥在任何情况下都不为空。我也检查了我的NSData(tweetData)
,这也不是null。我只是在保存这个错误。
答
你的代码没有任何内在的错误。 NSData太小而无法存储,但在这种情况下,我不会真正期待SIGABRT。最可能的问题是NSData是用[NSData dataWithBytesNoCopy:length:]
创建的,NSData指向的缓冲区已被释放。可能还有其他问题也会导致问题,例如在线程之间使用共享的NSData全局变量,CFDataRefs中的错误类型转换等。
尝试编写其他NSData并查看它是否有效。例如: NSData *tweetData = [NSData dataWithBytes:"Hello" length:6];
。我敢打赌,这个问题与你的tweetData是如何创建并发送到这个代码中有关。
+0
是的! NSData的大小很大。我已经通过将它存储在文档目录中的文件中来完成该操作。 –
那么,例外文本说什么? – trojanfoe
你的'tweetData'确认NSCopying协议。 http://stackoverflow.com/questions/1459598/how-to-copy-an-object-in-objective-c – dayitv89
@trojanfoe信号SIGABRT EXC_BAD_INSTRUCTION –