与Signal SIGABRT崩溃时无法在NSUserDefaults中保存数据

时间:2016-05-31 14:24:43

标签: ios objective-c ios8 nsuserdefaults

我正在尝试将NSData保存在NSUserDefaults循环中,但我经常收到错误。

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

[defaults synchronize];

其中i是循环的索引,这意味着key在任何情况下都不为null。我还检查了我的NSData(tweetData),这也不是空的。我只是在保存中遇到这个错误。

1 个答案:

答案 0 :(得分:2)

您的代码没有任何内在错误。 NSData太大而无法存储,但在这种情况下我不会真正期待SIGABRT。最可能的问题是NSData是使用[NSData dataWithBytesNoCopy:length:]创建的,并且NSData指向的缓冲区已被释放。可能还有其他问题导致问题,例如在线程之间使用共享NSData全局变量,从CFDataRefs中使用不正确的类型转换等等。

尝试编写不同的NSData并查看它是否有效。例如: NSData *tweetData = [NSData dataWithBytes:"Hello" length:6];。我打赌这有用,所以问题与你的tweetData如何创建并发送到这段代码有关。