zoukankan      html  css  js  c++  java
  • json中头疼的null

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

    "somevalue":null

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

    而且服务器返回数据中 null 值是不定的,我们也不太可能每个值都判断一遍[somevalue isKindOfClass:[NSNull class]]

    下面教大家两种方法:

    AFNetworking

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

    ((AFJSONResponseSerializer *)manager.responseSerializer).removesKeysWithNullValues = YES;

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

    没有 AFNetworking

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

    NullSafe

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

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

    #import "NSNull+OVNatural.h"
     
    @implementation NSNull (OVNatural)
    - (void)forwardInvocation:(NSInvocation *)invocation
    {
    if ([self respondsToSelector:[invocation selector]]) {
    [invocation invokeWithTarget:self];
    }
    }
     
    - (NSMethodSignature *)methodSignatureForSelector:(SEL)selector
    {
    NSMethodSignature *sig = [[NSNull class] instanceMethodSignatureForSelector:selector];
    if(sig == nil) {
    sig = [NSMethodSignature signatureWithObjCTypes:"@^v^c"];
    }
    return sig;
    }
     
    @end

    关于[NSMethodSignature signatureWithObjCTypes:“@^vc”]的功能
    可以参考以下两篇文章

    Objective-C Runtime Programming Guide
    Type Encodings

    相关nil / Nil / NULL / NSNull     

    http://blog.csdn.net/chun799/article/details/8914285

     
  • 相关阅读:
    学习&分享
    跳槽
    20121113:延期通知书
    2012.9.9 baocheng博客园正式与大家见面啦!
    数据库
    ASP.Net模板引擎
    javascript图片切换效果
    dockercompose环境下zookeeper单机搭建、集群搭建
    Linux服务器日常巡检脚本
    MMOS FFB伺服直驱方向盘主控板DIY
  • 原文地址:https://www.cnblogs.com/56ik/p/5131819.html
Copyright © 2011-2022 走看看