zoukankan      html  css  js  c++  java
  • 后台返回null iOS

    1。第一种解决方案  

    就是在每一个 可能传回null 的地方 使用  if([object isEqual:[NSNUll null]]) 去判断

    2。第二种解决方案

    网上传说老外写了一个Category,叫做NullSafe..只支持到ios9,3  ,实测 并没有解决我的问题..

    NullSafe的原理见 https://www.cnblogs.com/H7N9/p/5908149.html

    3。第三种解决方案

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

        AFJSONResponseSerializer *serializer = [AFJSONResponseSerializer serializer];

        serializer.removesKeysWithNullValues = YES;

        [serializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/json", @"text/html",@"text/json",@"text/javascript",@"text/plain", nil]];

        manager.responseSerializer=serializer;

        manager.requestSerializer = [AFJSONRequestSerializer serializer];

    不知道为什么无效,有大神给指导一下吗

    4。第四种解决方案

    json转model时,每个model里加上

    - (id)valueForUndefinedKey:(NSString *)key

    {

        return nil;

    }

     

    - (void)setValue:(id)value forUndefinedKey:(NSString *)key

    {

        

    }

     

    5。第5种解决方案

    在数组和字典的category里面写的两个方法. 完美解决..在每次请求回来数据,统一处理.. 

    废话不多说,上代码 

    字典的类目:

    #import "NSDictionary+Extension.h"

    #import "NSArray+Extension.h"

    @implementation NSDictionary (Extension)

    - (NSDictionary *)dictionaryByReplacingNulls {

        

        const NSMutableDictionary *replaced = [self mutableCopy];

        

        const id nul = [NSNull null];

        

        for (NSString *key in self) {

            

            id object = [self objectForKey:key];

            

            if (object == nul) [replaced removeObjectForKey:key];

            

            else if ([object isKindOfClass:[NSDictionary class]]) [replaced setObject:[object dictionaryByReplacingNulls] forKey:key];

            

            else if ([object isKindOfClass:[NSArray class]]) [replaced setObject:[object arrayByReplacingNulls] forKey:key];

            

        }

        

        return [NSDictionary dictionaryWithDictionary:[replaced copy]];

        

    }

    @end

     

     

     

    数组的类目:

    #import "NSArray+Extension.h"

    #import "NSDictionary+Extension.h"

    @implementation NSArray (Extension)

    - (NSArray *)arrayByReplacingNulls  {

        

        NSMutableArray *replaced = [self mutableCopy];

        

        const id nul = [NSNull null];

        

        for (int idx = 0; idx < [replaced count]; idx++) {

            

            id object = [replaced objectAtIndex:idx];

            

            if (object == nul) [replaced removeObjectAtIndex:idx];

            

            else if ([object isKindOfClass:[NSDictionary class]]) [replaced replaceObjectAtIndex:idx withObject:[object dictionaryByReplacingNulls]];

            

            else if ([object isKindOfClass:[NSArray class]]) [replaced replaceObjectAtIndex:idx withObject:[object arrayByReplacingNulls]];

            

        }

        

        return [replaced copy];

        

    }

     

     

    @end

    在封装的网络请求获取到后台数据的地方 将数据处理一下

    NSDictionary *dict = [responseObject dictionaryByReplacingNulls];

    success(dict);

    6。第6种解决方案 

    大力推荐:

    AvoidCrash再也不怕程序崩溃啦 AvoidCrash的功能不仅仅是数组,还有报错字典等许多功能,具体用法可以参考https://github.com/chenfanfang/AvoidCrash

    我的项目目前调用了3456这4种解决方案。请各位大神帮我分析利弊。

     

  • 相关阅读:
    今天过节提前下班
    作控件也挺郁闷啊!
    使用Windows XP的主题
    这几天关心加密的人很多
    多普达515,好爽啊!
    515看电影
    我要定计划
    龙芯II发布了,好事儿!
    转:关于星际与XP的结对编程
    昨天参加了一个微软的会
  • 原文地址:https://www.cnblogs.com/huangzs/p/7450885.html
Copyright © 2011-2022 走看看