尝试从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方法'
这有什么不对吗?感谢。
答案 0 :(得分:10)
这里的问题是,NSDictionary
和NSMutableDictionary
都将__NSCFDictionary
作为class
返回,因为NSDictionary
是一个类群。< / p>
我认为你必须制作settings
词典的可变副本,无论它是否可变。
NSMutableDictionary *mutableSettings = [settings mutableCopy];