无法通过 Signal SIGABRT 崩溃将数据保存在 NSUserDefaults 中

Unable to save data in NSUserDefaults with crash with Signal SIGABRT

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

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

[defaults synchronize];

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

您的代码本身没有任何问题。 NSData 有可能太大而无法存储,但在那种情况下我真的不希望出现 SIGABRT。最可能的问题是 NSData 是使用 [NSData dataWithBytesNoCopy:length:] 创建的,并且 NSData 指向的缓冲区已被释放。也可能有其他问题导致该问题,例如在线程之间使用共享的 NSData 全局变量、来自 CFDataRefs 的类型转换不正确等。

尝试编写不同的 NSData 并查看它是否有效。例如: NSData *tweetData = [NSData dataWithBytes:"Hello" length:6];。我敢打赌这行得通,所以问题与您的 tweetData 的创建方式和发送到此代码的方式有关。