这几天写一段数据迁移脚本,各种bug和闪退,定位以后发现大部分都是NSDictionary取key引发的错误
判断key存在
第一个场景是判断key是否存在,NSDictionary并没有类似containsKey之类的API,网上找到的判断方法,大部分是
if([dict objectForKey:@"xxx"]){
// key存在
}
如果一个@{}不包含某个key,那么调用objectForKey会返回nil,就走不进if的分支
判断key对应的value非空
但是这里的NSDictionary是用FMDB返回的结果,可能key是存在的,但是对应的value是null。那么下面的代码:
[[dict objectForKey:@"money"] intValue];
就会闪退,因为虽然money这个KEY存在,但是对应的value是NSNull。恶心的是,用简单的if方法判断不出value是否是NSNull
if([dict objectForKey:@"money"]){
// logic
}
因为此时objectForKey方法返回的不是nil,而是NSNull,而NSNull是可以走进if分支的。所以正确的判断应该是:
if(![[dict objectForKey:@"money"] isEqual:[NSNull null]]){
// logic
}
反正我是从来没见过别的语言里有这么恶心的非空判断
用category来解决
最后是写了一个NSDictionary的category来解决这个问题,只有当key存在,且key对应的value非空,才返回true
// judge nil
if(![dict objectForKey:key]){
return NO;
}
id obj = [dict objectForKey:key];// judge NSNull
return ![obj isEqual:[NSNull null]];
分享到:
相关推荐
自定义类在NSdictionary当key的示例, 简单,粗暴!
1.字典使用Key-Value的形式储存数据,是关键字及其定义(描述)的集合 2.字典中的对象储存没有顺序,使用key来表示每个对象,key唯一,Value值可相同 3.字典里Value值在前,key在后 Cocoa中的实现字典的集合...
ios demo,NSData和NSDictionary之间的相互转换的实现案例。
NSDictionary-NilSafe, 发光时我们如何让NSDictionary安全 nsdictionary-nilsafe在发光的时候我们如何使NSDictionary安全,更多的在发光科技博客上阅读。 示例要运行示例项目,克隆 repo,然后从示例目录中运行 pod ...
object-c基础语法NSDictionary, 适合初学者,主要学习字典的操作,包括字典创建、长度、通过KEY找到value、获取所有key、获取所有value、以及可变字典的定义、可变字典添加值、可变字典的删除等
NSDictionary,JSON和XML互相转换
根据条件查询字段 返回的数组是字典( @[@{key:value},@{key:value}] ) ,where形式 @[@"key",@"=",@"value",@"key",@">=",@"value"] */ -(NSArray*)queryWithTableName:(NSString*)name keys:(NSArray*)keys ...
- (NSDictionary *)deleteAllNullValue; 删除字典中的null 以便NSUserDefaults存储
详细的说明和用法 NSArray,NSSet,NSDictionary 以及他们子类的说明
NSString NSArray NSDictionary 方法名释义
NSDictionary-Enhance NSDictionary NSMutableDictionary 增强 Import pod 'NSDictionary-Enhance', '~> 1.0.0' Usage #import "NSDictionary+VDEnhance.h" [NSDictionary vd_dictionaryWithDictionary:originDic ...
NSData在IOS开发中是一个神奇的数据类型。比如说NSData可以与NSImage类型转换等等。NSData与JSON数据类型转换也是目前常用的热点。本文章是在实践基础上,给出示例代码来说明如何使用NSData,以及NSData与JSON,还有...
但是并没有考虑到其中存在的一些问题,例如当字符串中存在空格或者换行时或者当请求后台数据时得到的是进行JSON解析的时候, 如果解析出的NSDictionary中某个key对应的value为空, 则系统会把它处理为NSNull类的单例...
Objective-C&Swift库可以轻松将NSDictionary映射到模型对象,与Alamofire完美配合。 ObjectMapper与GSON类似
基于 NSDictionary 的内存缓存,可以识别未保留的值。 特征 线程安全。 检测未使用的对象并删除它们。 在进入背景时删除未使用的对象。 在收到内存警告时删除所有对象。 用法 设置对象 [cache setObject: object...
NSDictionary 比较详细的介绍。
NSDictionary-Accessors 为NSDictionary键入安全访问器,最好与从JSON解析的字典一起使用。 前: id value = nil;value = [dictionary objectForKey:@"id"];if ([value isKindOfClass:[NSNumber class]]) { model....
ios demo,NSDictionary toJSONString,字典转换到JSONString
主要介绍了IOS 开发之NSDictionary转换成JSON字符串的相关资料,这里提供实例帮助大家学习理解这部分知识,需要的朋友可以参考下