崩溃:发送到不可变对象的变异方法
Posted
技术标签:
【中文标题】崩溃:发送到不可变对象的变异方法【英文标题】:Crash: mutating method sent to immutable object 【发布时间】:2014-02-24 13:52:04 【问题描述】:我正在尝试删除 NSMutableDictionary
中特定键的对象,但尝试执行此操作时应用程序崩溃。这是我的代码:
NSArray *allWebDictionary = [NSJSONSerialization JSONObjectWithData:webData options:0 error:nil];
self.results = [[NSMutableArray alloc] initWithArray:allWebDictionary];
for (NSMutableDictionary *dic2 in self.results)
NSMutableArray *incidents = [dic2 valueForKey:@"incidents"];
for (NSMutableDictionary *incident in incidents)
[incident removeObjectForKey:@"type"];
我的应用程序崩溃并显示以下日志:
* 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“-[__NSCFDictionary removeObjectForKey:]: mutating method sent to immutable object”
有什么想法吗?提前致谢!
【问题讨论】:
您是否尝试过使用选项指定NSJSONReadingMutableContainers
而不是0
?总是更好地使用提供的常量。另外,在获得值后,坚持一个断点并检查以查看真实的数据类型。
【参考方案1】:
您制作了数组的可变副本,但数组中的字典仍然不可变。
你需要可变容器。
替换
NSArray *allWebDictionary = [NSJSONSerialization JSONObjectWithData:webData
options:0
error:nil];
与
NSMutableArray *allWebDictionary = [NSJSONSerialization JSONObjectWithData:webData
options:NSJSONReadingMutableContainers
error:nil];
【讨论】:
以上是关于崩溃:发送到不可变对象的变异方法的主要内容,如果未能解决你的问题,请参考以下文章
尽管对象是 NSMutableDictionary,但“发送到不可变对象的变异方法”