iOS 接口的safe操作
經(jīng)常有服務(wù)端返回的json 測(cè)試測(cè)的時(shí)候胡亂的改一通json,就會(huì)出現(xiàn)閃退,數(shù)據(jù)不全互躬,或者label上直接顯示 null這樣子的問(wèn)題。
這個(gè)問(wèn)題客戶端到底該如何預(yù)防呢?如果直接使用字典新博,就有可能出現(xiàn)如下的預(yù)判
if (ISNSNUMBER(result.data[@"data"][@"unreadNumber"])) {
NSNumber * number=result.data[@"data"][@"unreadNumber"];
data.unReadMsgCount =[number integerValue];
}
或者使用YYModel類(lèi)似的字典解析。
PCMsgData *data = [PCMsgData yy_modelWithJSON:dict];
當(dāng)然 YYModel 有好處就是脚草,這里的參數(shù) dict 可以 NSDictionary NSString NSData 赫悄,之后只要判斷出對(duì)應(yīng)的值就好了,代價(jià)就是要Model 化馏慨,生成很多Model.
如果其中的一些key是和服務(wù)端約定好的
約定好的json出問(wèn)題了埂淮,不應(yīng)該直接忽略這個(gè)值,應(yīng)該嘗試修復(fù)写隶,或者做個(gè)統(tǒng)計(jì)倔撞。
比如之前的字典解析
if (ISNSNUMBER(result.data[@"data"][@"unreadNumber"])) {
NSNumber * number=result.data[@"data"][@"unreadNumber"];
data.unReadMsgCount =[number integerValue];
}
else {
///類(lèi)似一個(gè)給默認(rèn)值的機(jī)制
number = 0;
///類(lèi)似一個(gè)上報(bào)的函數(shù)
report(result.data,__FUNTION__);
}
如果data沒(méi)有 unreadNumber 這個(gè)值,或者壓根沒(méi)有data這個(gè)值慕趴,應(yīng)該默認(rèn)的值 0痪蝇,然后統(tǒng)計(jì)一下時(shí)間和 值,如果是重要的值冕房,沒(méi)有功能就沒(méi)法用的就反饋給服務(wù)端躏啰,
PCMsgData *data = [PCMsgData yy_modelWithJSON:dict];
此時(shí),對(duì)于重要的值毒费,可以重寫(xiě)get方法丙唧,比如:
- (NSString *)title {
if (!_title) {
_title = @"默認(rèn)值";
report([self class],@"title",@"沒(méi)有值");
}
return _title;
}
此處report可以是本地文件記錄,或NSLog 輸出觅玻,真是上報(bào)服務(wù)端想际。
peak君之前的文章也有過(guò)去model化的介紹,
我們自己的APP也經(jīng)常出現(xiàn)服務(wù)端說(shuō)沒(méi)問(wèn)題溪厘,客戶端就不展示的問(wèn)題胡本,socket 更是,