zoukankan      html  css  js  c++  java
  • 眼见不一定为实

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

  • 相关阅读:
    用ProFTPD构建FTP服务器
    Js数组里剔除指定的元素(不是指定的位置)
    JS跨域设置和取Cookie
    ajax test
    js下判断 iframe 是否加载完成的完美方法
    使用div模拟出frameset效果
    js中call与apply用法
    phpstorm 快捷键
    JQuery中 数组与字符串(过滤,排序,拆分,合并)
    基于 Apache 在本地配置多个虚拟主机
  • 原文地址:https://www.cnblogs.com/mo-shou/p/4199273.html
Copyright © 2011-2022 走看看