首页 > 代码库 > 眼见不一定为实
眼见不一定为实
在解析JSON时候,很多人会将解析后的数据赋给NSDictionary,通过key值取到相应的value。
有时候我们会对数据进行增删。
面对要删除某一个key下的数据,第一反应是使用可变字典,将解析后的数据赋给其,但在使用过程中发现,执行removeObjectForKey方法后,程序不断崩溃。
但在正常使用中却没有任何失误,依然可以使用其他方法,进行取key或者value,这种情况让人实属迷惑。仔细阅读一下报错信息。
查看下输出的崩溃信息是
terminate_handler unexpectedly threw an exception
于是使用异常捕获来查看下问题所在,我们将removeObjectForKey方法放到@try中
@try {}@catch (NSException *exception) { NSLog(@"%@",exception);}@finally { NSLog(@"end");}
输出的exception为:
[__NSCFDictionary removeObjectForKey:]: mutating method sent to immutable object
无法在不可变数组上执行removeObjectForKey方法。
原来我们使用了可变字典来接受解析后JSON,虽然可以正常使用,但还是有一些问题。
随即发现,设置的可变字典只是表面上看着是可变的,实则是不可变字典。我们将代码进行小小的改动,将不可变字典转换成可变字典,即可进行删除数据的目的。
+ (instancetype)dictionaryWithDictionary:(NSDictionary *)dict;
这样即可正常的执行remove方法。
眼见不一定为实
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。