刚修复个bug,原来又是某个接口返回的json中的value是特么null!当取这个value进行一些操作自然会崩溃掉
这种情况发生次数太多了,今天实在忍不住上来吐个槽,毕竟我不能每个value都监测下是不是null吧?!
这服务器怎么写的,数据库怎么建的?添加数据的时候怎么验证的?接口返回的时候怎么处理的?
估计都特么随便一弄糊弄事了。。。
服务器靠不住,于是。。。于是写了个宏
#define checkNull(__X__) (__X__) == [NSNull null] || (__X__) == nil ? @ "" : [NSString stringWithFormat:@ "%@", (__X__)]
然后每次发现crash是null导致的我就check null!
要要checknull,每天这来两句还挺带感的嘛
要要checknull,动词打次动词打次,苍茫的天涯是我的爱。。。
突然发现原爱我在一个月以前就发过类似的帖子。。。
其实我觉得该有null的做处理是应该的,不过有些关键的,比如用户id之类的,这类参数你很多时候请求服务器是需要用的,返回null即使你处理了,这个客户端也是有问题的,我的意思不是一棒子打死返回null就不行, 而且有的时候连这个key都有可能没有!不过无所谓了,看到上一个帖子有个回复不错,写了个category,这个方法不错,于是。。。
#import "NSDictionary+safeObjectForKey.h"
#define checkNull(__X__) (__X__) == [NSNull null] || (__X__) == nil ? @ "" : [NSString stringWithFormat:@ "%@", (__X__)]
@implementation NSDictionary (safeObjectForKey)
- ( NSString *)safeObjectForKey:( id)key
{
return checkNull([ self objectForKey:key]);
}
@end
说实话,如果是我自己的产品,我是绝对不会这么用的,凭空增加了运算,不过反正也是外包项目,而且服务器那边也不保证返回正确,那我也没办法
不过这样的代码真的算是增加程序的健壮性吗?
这种情况发生次数太多了,今天实在忍不住上来吐个槽,毕竟我不能每个value都监测下是不是null吧?!
这服务器怎么写的,数据库怎么建的?添加数据的时候怎么验证的?接口返回的时候怎么处理的?
估计都特么随便一弄糊弄事了。。。
服务器靠不住,于是。。。于是写了个宏
#define checkNull(__X__) (__X__) == [NSNull null] || (__X__) == nil ? @ "" : [NSString stringWithFormat:@ "%@", (__X__)]
然后每次发现crash是null导致的我就check null!
要要checknull,每天这来两句还挺带感的嘛
要要checknull,动词打次动词打次,苍茫的天涯是我的爱。。。
突然发现原爱我在一个月以前就发过类似的帖子。。。
其实我觉得该有null的做处理是应该的,不过有些关键的,比如用户id之类的,这类参数你很多时候请求服务器是需要用的,返回null即使你处理了,这个客户端也是有问题的,我的意思不是一棒子打死返回null就不行, 而且有的时候连这个key都有可能没有!不过无所谓了,看到上一个帖子有个回复不错,写了个category,这个方法不错,于是。。。
#import "NSDictionary+safeObjectForKey.h"
#define checkNull(__X__) (__X__) == [NSNull null] || (__X__) == nil ? @ "" : [NSString stringWithFormat:@ "%@", (__X__)]
@implementation NSDictionary (safeObjectForKey)
- ( NSString *)safeObjectForKey:( id)key
{
return checkNull([ self objectForKey:key]);
}
@end
说实话,如果是我自己的产品,我是绝对不会这么用的,凭空增加了运算,不过反正也是外包项目,而且服务器那边也不保证返回正确,那我也没办法
不过这样的代码真的算是增加程序的健壮性吗?