遍历NSMutableDictionary时setObject forKey崩溃(<null>处理)

NSMutableDictionary是经常用的数据,他的两个方法setObject forKey和setValue forKey是最常用的了,这两个方法的区别就不多说

但最近由于处理服务器返回的数据有些key对应的值为   <null>  !!! 想把有这种值的都改成空“”,不然显示出来很难看,方法是遍历
NSMutableDictionary然后找到 <null> 值对应的key,改成 @“”,

id temp = [jsonDict objectForKey:@"order_detail"];

                if (([temp isKindOfClass:[NSDictionary class]])&&(temp!=nil)) {

                    

                    order_detailDict = [NSMutableDictionary dictionaryWithDictionary:temp];

         

                    //去掉为 <null> 的值

                    for (id key in order_detailDict) {

                        if ([order_detailDict[key] isEqual:[NSNull null]]) {

                    [order_detailDict setObject:@"" forKey:key];

                            }

                    }

                   }


这样处理,程序一运行就崩溃了。。。。。。崩溃日志暂时看不懂>_<。

网上查找了很久没有讲到这方面的,都是讲setObject和setValue的注意事项和区别。。。。

也怀疑过是浅拷贝copy和深拷贝mutable copy的区别造成,但NSMutableDictionary是没有这个问题的。。。。

后来试试的心态把[order_detailDict setObject:@"" forKey:key];放到for循环遍历的外面执行,没问题了!!!!

最后的代码修改如下,运行正常,真正的原因还不知道,难道是字典遍历的时候不允许修改值???

id temp = [jsonDict objectForKey:@"order_detail"];

                if (([temp isKindOfClass:[NSDictionary class]])&&(temp!=nil)) {

                    

                    order_detailDict = [NSMutableDictionary dictionaryWithDictionary:temp];

                    

                    //去掉为 <null> 的值

                    NSMutableArray *temp = [NSMutableArray new];

                    for (id key in order_detailDict) {

                        if ([order_detailDict[key] isEqual:[NSNull null]]) {

                            [temp addObject:key];

                            }

                    }

                    for (id key in temp) {

                        [order_detailDict setObject:@"" forKey:key];   //这句不能放到遍历order_detailDict时做,会崩溃,不知为何

                    }



                }


另外,关于 null <null> (网上其他资料说的都是nil,Null和NSnull的区别什么的)这两个数据的处理,引用另一个博主的文章

http://blog.csdn.net/shenshen123jun/article/details/38315755说明下

不小心在开发过程中,得到了(null)以及<null>的返回值,找了好长时间只找到了一个关于<null>的。

由于要根据返回值进行判断,做出必要反应,因此必须知道返回值所代表的具体字符,在得到(null)后利用isEqual:和@“”,NULL,@“(null)”,nil,Nil比较后均得不到正确结果,弄得不知所措了,但是还是感觉像nil,不得已,创建一个字符串,赋值为nil,打印输出,果然是(null),想不通的是为什么不等。最后试了一下“==”,成功了。费尽周折之后才明白原来要这样用:

if(m_result==nil)

    NSLog(@"KDA!");

}

还有就是<null>,从网上找到了用法:

if([m_result isEqual:[NSNUll null]])

    NSLog(@"KDA!");

}

问题很简单,找不到原因解决就难了,不由感叹,基础最关键啊。

记下,希望能帮到别人一点点就够了。





id temp = [jsonDict objectForKey:@"order_detail"];

                if (([temp isKindOfClass:[NSDictionary class]])&&(temp!=nil)) {

                    

                    order_detailDict = [NSMutableDictionary dictionaryWithDictionary:temp];

                    

                    //去掉为 <null> 的值

                    NSMutableArray *temp = [NSMutableArray new];

                    for (id key in order_detailDict) {

                        if ([order_detailDict[key] isEqual:[NSNull null]]) {

                            [temp addObject:key];

                            }

                    }

                    for (id key in temp) {

                        [order_detailDict setObject:@"" forKey:key];   //这句不能放到遍历order_detailDict时做,会崩溃,不知为何

                    }



                }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值