我正试图将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是如何创建并发送到这个代码中的。