博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
眼见不一定为实
阅读量:4356 次
发布时间:2019-06-07

本文共 797 字,大约阅读时间需要 2 分钟。

在解析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方法。

 

转载于:https://www.cnblogs.com/mo-shou/p/4199273.html

你可能感兴趣的文章
QT窗体显示在屏幕中间位置
查看>>
emmet使用技巧
查看>>
RPC-Thrift(二)
查看>>
MSSQL for Linux 安装指南
查看>>
【Golang 接口自动化08】使用标准库httptest完成HTTP请求的Mock测试
查看>>
洛谷 P1036 选数
查看>>
女性社区TOP10
查看>>
BP神经网络算法推导及代码实现笔记zz
查看>>
前端必读:浏览器内部工作原理
查看>>
每天一个Linux命令(16)--which命令
查看>>
libevent文档学习(一)多线程接口和使用
查看>>
【补hackbar的坑】关于hackbar需要钱的补救措施
查看>>
纤程与Quasar
查看>>
MySQL的一个麻烦事
查看>>
Uri、URL和URN三者的区别
查看>>
数据字典的转换
查看>>
二维数组按照指定的字段排序的函数
查看>>
在IAR下通过Jlink将程序直接下载到Flash指定地址
查看>>
POJ2560-雀斑(Freckles)【图论,并查集,最小生成树,KURUSKAL】
查看>>
[Angular] Tree shakable provider
查看>>