在服务器返回 json 数据的时候,时常会出现如下数据


"somevalue":null


这个时候,json 解析的时候,就会吧这个 null 解析成 NSNull 的对象,我们向这个 NSNull 对象发送消息的时候就会遇到 crash 的问题。




AFNetworking

如果你使用了 AFNetworking,只需要增加如下代码


.responseSerializer)
  
  .removesKeysWithNullValues = 
  
  YES;


经过如上设置,所有 NSNull 的值,都变成了 nil,接下来又可以愉快的玩耍了。

没有 AFNetworking

没有使用 AFN 也没关系,我们需要的只是向 NSNull 发消息不崩溃,已经有人实现了这个功能了

NullSafe

你只需要引入这个库,什么都不需要做,当你再向 NSNull 对象发消息的时候,就不会 crash 了。

这里还有一个极简的封装方法:


#import "NSNull+OVNatural.h"
 
 
 
 
@implementation NSNull (OVNatural)
 
 
void)forwardInvocation:(NSInvocation *)invocation
 
 
 
 

  
  {
 
 
 
 
if ([
  
  self
 
 
self];
 
 
 
 

  
      }
 
 
 
 

  
  }
 
 
 
 
 
 

  
  - (NSMethodSignature *)methodSignatureForSelector:(SEL)selector
 
 
 
 

  
  {
 
 
 
 

  
      NSMethodSignature *sig = [[NSNull class] instanceMethodSignatureForSelector:selector];
 
 
 
 
if(sig == 
  
  nil) {
 
 
 
 
"@^v^c"];
 
 
 
 

  
      }
 
 
 
 
return
 
 

  
  }
 
 
 
 
 
 
@end


[NSMethodSignature signatureWithObjCTypes:“@^vc”]的功能

可以参考以下两篇文章