话题说明了一切。我有一个字典字典(是的,这是一个字典接收!)存储在NSUserDefaults
中。出于某种原因,在将对象设置为字典之后,我就在main.m上获得了SIGABRT。这是代码:
planDict = [[NSUserDefaults standardUserDefaults]objectForKey:[NSString stringWithFormat:@"Plan_%@", self.planName]];
pageOne = [planDict objectForKey:@"Page_1"];
pageTwo = [planDict objectForKey:@"Page_2"];
pageThree = [planDict objectForKey:@"Page_3"];
[pageOne setObject:@"The Object" forKey:@"First Key"];
[pageOne setObject:@"The Other Object" forKey:@"Second Key"];
//other setters
我已经调试了它,直到
[pageOne setObject:@"TheObject" forKey:@"First Key"];
行为止。当我跨过它时,它刚刚崩溃了(main.m中的SIGABRT)。这是崩溃前的日志:
(gdb) po planDict
{
"Page_1" = {
};
"Page_2" = {
};
"Page_3" = {
};
}
(gdb) po pageOne
{
}
(gdb) po pageTwo
{
}
(gdb) po pageThree
{
}
任何帮助将不胜感激,谢谢。
最佳答案
询问NSUserDefaults返回的字典将是不可变的字典,字典中的任何字典等也将是不可变的字典。
因此,在不可变字典上设置对象确实会引发SIGABRT错误,因为返回的对象不了解您发送给它的方法。
您将需要创建字典的可变副本,并为该字典中的每个包含的字典制作可变副本。
希望能解决您的错误。
关于iphone - 将对象设置为NSMutableDictionary之后的SIGABRT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9988851/