发送到Immutable对象的变异方法 - 哪里?

时间:2012-07-20 20:41:56

标签: iphone xcode ios5 nsmutablearray nsuserdefaults

有点卡在这个错误上。

非常基本的错误

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}}吗?

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

由于

1 个答案:

答案 0 :(得分:4)

NSUserDefaults不是常规集合。它不能容纳你给它的任何东西。 -[NSUserDefaults objectForKey:]将始终返回适当类型的不可变对象。