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