iOS 接口的safe操作
经常有服务端返回的json 测试测的时候胡乱的改一通json,就会出现闪退,数据不全,或者label上直接显示 null这样子的问题。
这个问题客户端到底该如何预防呢?如果直接使用字典,就有可能出现如下的预判
if (ISNSNUMBER(result.data[@"data"][@"unreadNumber"])) {
NSNumber * number=result.data[@"data"][@"unreadNumber"];
data.unReadMsgCount =[number integerValue];
}
或者使用YYModel类似的字典解析。
PCMsgData *data = [PCMsgData yy_modelWithJSON:dict];
当然 YYModel 有好处就是,这里的参数 dict 可以 NSDictionary NSString NSData ,之后只要判断出对应的值就好了,代价就是要Model 化,生成很多Model.
如果其中的一些key是和服务端约定好的
约定好的json出问题了,不应该直接忽略这个值,应该尝试修复,或者做个统计。
比如之前的字典解析
if (ISNSNUMBER(result.data[@"data"][@"unreadNumber"])) {
NSNumber * number=result.data[@"data"][@"unreadNumber"];
data.unReadMsgCount =[number integerValue];
}
else {
///类似一个给默认值的机制
number = 0;
///类似一个上报的函数
report(result.data,__FUNTION__);
}
如果data没有 unreadNumber 这个值,或者压根没有data这个值,应该默认的值 0,然后统计一下时间和 值,如果是重要的值,没有功能就没法用的就反馈给服务端,
PCMsgData *data = [PCMsgData yy_modelWithJSON:dict];
此时,对于重要的值,可以重写get方法,比如:
- (NSString *)title {
if (!_title) {
_title = @"默认值";
report([self class],@"title",@"没有值");
}
return _title;
}
此处report可以是本地文件记录,或NSLog 输出,真是上报服务端。
peak君之前的文章也有过去model化的介绍,
我们自己的APP也经常出现服务端说没问题,客户端就不展示的问题,socket 更是,