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时做,会崩溃,不知为何
}
}