Ios 无法在NSUserDefaults中保存带有信号SIGABRT的崩溃数据

Ios 无法在NSUserDefaults中保存带有信号SIGABRT的崩溃数据,ios,objective-c,ios8,nsuserdefaults,Ios,Objective C,Ios8,Nsuserdefaults,我试图将NSData保存在nsserdefaults的循环中,但我经常收到一个错误 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *index = [NSString stringWithFormat:@"alltweetsoftrend%d", i]; [defaults setObject:tweetData forKey:index]; [defaults synchronize];

我试图将
NSData
保存在
nsserdefaults
的循环中,但我经常收到一个错误

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

[defaults synchronize];

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

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

尝试编写不同的NSData,看看它是否有效。例如:
NSData*tweetData=[NSData dataWithBytes:“Hello”长度:6]。我打赌这是可行的,所以问题与您的tweetData是如何创建并发送到此代码的有关。

那么异常文本是怎么说的?您的
tweetData
是否确认了NSCopying协议@特洛伊木马信号SIGABRT EXC_BAD_指令,该指令不是异常文本。iOS将生成一个带有问题解释的
NSException
。我假设您在Xcode中运行这个?nsUserDefault用于存储少量数据。您是否尝试将其写入文件并将文件名设置为NSUserDefaults?NSData有一个writeToFile方法。是!数据量很大。我通过将其存储到文档目录中的一个文件中实现了这一点。