0

有点卡在这个错误上。

非常基本的错误

2012-07-20 12:44:07.462 Picsilk[4286:17903] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'

我知道这意味着在我的代码中某处我试图将一个对象插入到 NSArray 而不是 NSMutableArray 中。

但是,我没有insertObject:atIndex:在我的应用程序中使用方法 -anywhere-。

说真的,我在项目中的所有文件中搜索了“插入”,但什么也没找到。

在使用断点进行一些搜索之后,我发现当我使用 addObject 将对象存储在NSMutableDictionary对象中NSMutableArray包含的NSUserDefaults standardUserDefaults对象中时,似乎出现了问题

NSUserDefaults *userDef = [NSUserDefaults standardUserDefaults];

if(![userDef objectForKey:@"somekey"])
    [userDef setObject:[[NSMutableArray alloc] init] forKey:@"somekey"];

NSMutableDictionary *data = [NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"somehtmlstring", @"someid", nil] forKeys:[NSArray arrayWithObjects:@"data",@"id", nil ]];


    [[userDef objectForKey:@"somekey"] addObject:data  ];

错误发生在最后一行。可以肯定的是,一切都是可变的。我不应该这样使用NSUserDefaults吗?

此外,这显然是我实际代码的淡化版本。很确定我已经包含了所有相关的内容,但如果需要,我可以发布实际的代码/目的。

谢谢

4

1 回答 1

4

NSUserDefaults不是常规收藏。它不容纳你给它的任何东西。-[NSUserDefaults objectForKey:]总是会给你一个适当类型的不可变对象。

于 2012-07-20T20:44:22.293 回答