解决NSNull对象的烦恼

在使用网络请求时,如果服务端返回的数据不够标准,就会出现value为null情况,为此我们需要添加很多判断!比如:

    if (![str isKindOfClass:[NSNull class]]) {
        NSLog(@"%d",(int)str.length);
    }

如果不判断直接使用,就有可能出现运行时错误导致崩溃,因为你不知道什么情况下,服务器就会将某些值返回成null.但是每个字段都判断也很麻烦!我在stackoverflow看到的一个方法分享给大家,提供个思路.

方法:

创建NSNull的分类,让一些常见的NSString或NSNumber的方法给NSNull提供一份,这样在调用类似str.length的方法时,就不会因为NSNull没有length方法而照成崩溃了.

.h
#import 
@interface NSNull (JSON)
@end

.m
#import "NSNull+JSON.h"
@implementation NSNull (JSON)

- (NSUInteger)length { return 0; }

- (NSInteger)integerValue { return 0; };

- (float)floatValue { return 0; };

- (NSString *)description { return @"0(NSNull)"; }

- (NSArray *)componentsSeparatedByString:(NSString *)separator {return @[]; }

- (id)objectForKey:(id)key { return nil; }

- (BOOL)boolValue { return NO; }

- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)aSet{
    NSRange nullRange = {NSNotFound, 0};
    return nullRange;
}
@end

你可能感兴趣的:(解决NSNull对象的烦恼)