眼见不必定为实

在解析JSON时候,不少人会将解析后的数据赋给NSDictionary,经过key值取到相应的value。数组

有时候咱们会对数据进行增删。spa

面对要删除某一个key下的数据,第一反应是使用可变字典,将解析后的数据赋给其,但在使用过程当中发现,执行removeObjectForKey方法后,程序不断崩溃。code

但在正常使用中却没有任何失误,依然能够使用其余方法,进行取key或者value,这种状况让人实属迷惑。仔细阅读一下报错信息。blog

 

查看下输出的崩溃信息是rem

terminate_handler unexpectedly threw an exception

 

因而使用异常捕获来查看下问题所在,咱们将removeObjectForKey方法放到@try中it

 @try {
}
@catch (NSException *exception) {
     NSLog(@"%@",exception);
}
@finally {
    NSLog(@"end");
}

 

输出的exception为:io

[__NSCFDictionary removeObjectForKey:]: mutating method sent to immutable object

 

没法在不可变数组上执行removeObjectForKey方法。table

原来咱们使用了可变字典来接受解析后JSON,虽然能够正常使用,但仍是有一些问题。class

随即发现,设置的可变字典只是表面上看着是可变的,实则是不可变字典。咱们将代码进行小小的改动,将不可变字典转换成可变字典,便可进行删除数据的目的。object

+ (instancetype)dictionaryWithDictionary:(NSDictionary *)dict;

这样便可正常的执行remove方法。

相关文章
相关标签/搜索