iOS 后台返回json解析出现的null的解决办法
在后臺(tái)返回值為Null為空時(shí),我們代碼沒有判斷時(shí),程序就會(huì)崩潰。當(dāng)時(shí)一直很疑惑是為啥,后來發(fā)現(xiàn)是數(shù)據(jù)問題,由于服務(wù)器的數(shù)據(jù)庫中有些字段為空,然后以Json形式返回給客戶端時(shí)就會(huì)出現(xiàn)這樣的數(shù)據(jù)。當(dāng)我們通過一些第三方數(shù)據(jù)解析庫解析數(shù)據(jù)后,就會(huì)是下圖這種數(shù)據(jù)格式。null既不是字符串也不是nil所以我們有些判斷是沒用的。
解析成對(duì)象之后,如果直接向這個(gè)對(duì)象發(fā)送消息(length,count 等等)就會(huì)直接崩潰。提示錯(cuò)誤為
-[NSNull length]: unrecognized selector sent to instance 0x388a4a70解決辦法
1.對(duì)取值對(duì)象類型判斷。缺點(diǎn)是太過繁瑣,每次都要寫。
```
define kDictIsEmpty(dic) ([dic isKindOfClass:[NSNull class]])//宏
if ([@"你要取的值" isKindOfClass:[NSNull class]]){
//數(shù)據(jù)
}
json = [jsonStr stringByReplacingOccurrencesOfString:@":null" withString:@""];
**3.解析時(shí)把null 類型替換成nil。**//有返回值的宏
define isToNull(value) ({ id tmp; if ([value isKindOfClass:[NSNull class]]) tmp = value; else
tmp = nil;\ (tmp);\})
//調(diào)用方法
label.text = isToNull(dic[@"data"]);
AFHTTPRequestOperationManager manager = [AFHTTPRequestOperationManager manager];
AFJSONResponseSerializer response = [AFJSONResponseSerializer serializer];
response.removesKeysWithNullValues = YES;//去除空值
manager.responseSerializer = response;//申明返回的結(jié)果是json類
```
去除前
去除后 所有為空的鍵值對(duì)都不會(huì)自動(dòng)去除
5.最有效而且簡單的方法。使用國外一位大牛寫的Category,叫做NullSafe ,在運(yùn)行時(shí)操作,把空值置為nil,而nil是安全的,可以向nil對(duì)象發(fā)送任何message而不會(huì)奔潰。
具體使用方法項(xiàng)目有說明
NullSafe鏈接
轉(zhuǎn)載于:https://www.cnblogs.com/huanghaipo/p/7453086.html
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的iOS 后台返回json解析出现的null的解决办法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高效开发iOS
- 下一篇: 2017.8.30 elasticsea