话题说明了一切。我有一个字典字典(是的,这是一个字典接收!)存储在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/

10-12 03:36