需求
- iOS app接收到JSON数据,并保存到NSUserDefault中。
- JSON中部分字段可能为空(null)
分析
- 由于JSON中部分字段为空,直接转换为
NSDictionary
后,存入NSUserDefault会报错。因为值为null的字段不能无法存入NSUserDefault。NSUserDefault只能存入特定类型的对象:NSData, NSString, NSNumber, NSDate, NSArray, NSDictionary
。如果想要存储其它类型,需打包成NSData类型。
备注:Swift 中String、Array、 Dictionary等也是可以存入USerDefault的,这些类型等价于Objective C 中对应的类
方法一
- 新建一个基于JSON的model类
- 实现NSCoding协议
- 将JSON转换为model实例,值为null的转换为0或""等
- 将model实例打包成
NSData
数据 - 保存到NSUserdefault中
具体可参考NSUserDefault用法中“自定义Model打包NSData类型”部分
方法二
- 新建一个基于JSON的model类
- 将JSON转换为model实例,值为null的转换为0或""等,具体可借助开源代码YYModel等转换
- 将model实例转换为
NSDictionary
,仍然可以通过开源代码YYModel等转换 - 将转换后的
NSDictionary
存入到NSUserdefault中