iOS 接口的safe操作

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 更是,

你可能感兴趣的:(iOS 接口的safe操作)