有点卡在这个错误上。
非常基本的错误
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
错误发生在最后一行。但是,确定一切都是可变的。我不应该像这样使用{{1}}吗?
此外,这显然是我实际代码的淡化版本。很确定我已经包含了所有相关的内容,但如果需要,我可以发布实际的代码/目的。
由于
答案 0 :(得分:4)
NSUserDefaults
不是常规集合。它不能容纳你给它的任何东西。 -[NSUserDefaults objectForKey:]
将始终返回适当类型的不可变对象。