由于Signal SIGABRT崩溃,无法将数据保存在NSUserDefaults中



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

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

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

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

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

最新更新