需求
- iOS app接收到JSON數(shù)據(jù),并保存到NSUserDefault中。
- JSON中部分字段可能為空(null)
分析
- 由于JSON中部分字段為空,直接轉(zhuǎn)換為
NSDictionary后,存入NSUserDefault會(huì)報(bào)錯(cuò)。因?yàn)橹禐閚ull的字段不能無法存入NSUserDefault。NSUserDefault只能存入特定類型的對(duì)象:NSData, NSString, NSNumber, NSDate, NSArray, NSDictionary。如果想要存儲(chǔ)其它類型,需打包成NSData類型。
備注:Swift 中String、Array、 Dictionary等也是可以存入U(xiǎn)SerDefault的,這些類型等價(jià)于Objective C 中對(duì)應(yīng)的類
方法一
- 新建一個(gè)基于JSON的model類
- 實(shí)現(xiàn)NSCoding協(xié)議
- 將JSON轉(zhuǎn)換為model實(shí)例,值為null的轉(zhuǎn)換為0或""等
- 將model實(shí)例打包成
NSData數(shù)據(jù) - 保存到NSUserdefault中
具體可參考NSUserDefault用法中“自定義Model打包NSData類型”部分
方法二
- 新建一個(gè)基于JSON的model類
- 將JSON轉(zhuǎn)換為model實(shí)例,值為null的轉(zhuǎn)換為0或""等,具體可借助開源代碼YYModel等轉(zhuǎn)換
- 將model實(shí)例轉(zhuǎn)換為
NSDictionary,仍然可以通過開源代碼YYModel等轉(zhuǎn)換 - 將轉(zhuǎn)換后的
NSDictionary存入到NSUserdefault中