从可变字典中删除对象会引发异常

时间:2012-04-21 16:20:59

标签: ios cocoa nsdictionary

尝试从NSMutableDictionary中删除对象后,我遇到异常。相关代码如下。 'settings'被传递给方法,可以是NSDictionary或NSMutableDictionary。

 NSMutableDictionary *mutableSettings = nil;
 if ([settings isKindOfClass:[NSMutableDictionary class]])
     mutableSettings = (NSMutableDictionary *)settings;
 else 
     mutableSettings = [[[NSMutableDictionary alloc] initWithDictionary:settings] autorelease];

 [mutableSettings removeObjectForKey:@"akey"];

这与

崩溃
  
    

* 由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:' - [__ NSCFDictionary removeObjectForKey:]:发送到不可变对象的mutating方法'

  

这有什么不对吗?感谢。

1 个答案:

答案 0 :(得分:10)

这里的问题是,NSDictionaryNSMutableDictionary都将__NSCFDictionary作为class返回,因为NSDictionary是一个类群。< / p>

我认为你必须制作settings词典的可变副本,无论它是否可变。

NSMutableDictionary *mutableSettings = [settings mutableCopy];