9

尝试从 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 method sent to immutable object”

这有什么问题?谢谢。

4

1 回答 1

10

这里的问题是两者都NSDictionary作为它们NSMutableDictionary返回,因为它是一个类簇。__NSCFDictionaryclassNSDictionary

我认为您只需要制作settings字典的可变副本,无论它是否可变。

NSMutableDictionary *mutableSettings = [settings mutableCopy];
于 2012-04-21T16:41:59.647 回答