1。第一种解决方案

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

2。第二种解决方案

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

3。第三种解决方案

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3495af }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #b4261a }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000 }
span.s1 { }
span.s2 { color: #000000 }
span.s3 { color: #0433ff }
span.s4 { color: #3495af }

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里加上

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #0433ff }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; min-height: 13.0px }
span.s1 { }
span.s2 { color: #0433ff }
span.s3 { color: #3495af }
span.s4 { color: #000000 }

- (id)valueForUndefinedKey:(NSString *)key

{

return nil;

}

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

{

}

5。第5种解决方案

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

废话不多说,上代码

字典的类目:

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #b4261a }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; min-height: 13.0px }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3495af }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #0433ff }
span.s1 { color: #0433ff }
span.s2 { }
span.s3 { color: #3495af }
span.s4 { color: #000000 }

#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

数组的类目:

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #b4261a }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; min-height: 13.0px }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3495af }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #0433ff }
span.s1 { color: #0433ff }
span.s2 { }
span.s3 { color: #3495af }
span.s4 { color: #000000 }

#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

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

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3495af }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000 }
span.s1 { }
span.s2 { color: #000000 }

NSDictionary *dict = [responseObject dictionaryByReplacingNulls];

success(dict);

6。第6种解决方案

大力推荐:

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

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

后台返回null iOS的更多相关文章

  1. iOS 后台返回json解析出现的null的解决办法

    在后台返回值为Null为空时,我们代码没有判断时,程序就会崩溃.当时一直很疑惑是为啥,后来发现是数据问题,由于服务器的数据库中有些字段为空,然后以Json形式返回给客户端时就会出现这样的数据.当我们通 ...

  2. iOS 用webView加载后台返回的HTML数据

    返回数据: <p><b>\U516c\U53f8\U7b80\U4ecb</b></p><p>    \U5584\U76c8\U7ba1\ ...

  3. [bug] 前台表单添加数据,后台返回成功消息,但数据库相应字段值为null

    原因 前端代码中输入框字段值和后端定义的属性值不一致 分析 bean . controller 如下图,浏览器收到后台返回消息,在后台也可打印user信息,说明已成功接收前端JSON数据并转换为use ...

  4. Android Fragment getActivity返回null解决

    在Android开发中,如果我们用到V4包里面的Fragment,在应用被切换到后台的时候,Activity可能被回收,但是创建的所有Fragment则会被保存到Bundle里面,下面是Fragmen ...

  5. js循环处理后台返回的json数组

    <script type="text/javascript"> function gongdan_search(elm){ var dangqian_value=$(e ...

  6. thinkphp3.2.3使用ajax 的一些坑——使用AjaxReturn()后,直接返回null,模板文件不起作用

    从接触thinkphp到今天,填完此坑,必有其他的坑有会冒出来.哎!这个填坑之路我想是没有尽头的了. 最近,需要使用ajax完成一些操作,一开始想Ajax简单啊,不过是一种提交数据的方式,不过是害苦了 ...

  7. SpringMVC系列(十一)把后台返回的数据转换成json、文件下载、文件上传

    一.后台返回的数据转换成json 1.引入转换json需要的3个依赖 <!--json转换需要的依赖 begin --> <dependency> <groupId> ...

  8. js前台遍历后台返回的Datatable数据

    jsondata 后台返回的datatable ) { ; j < jsondata.length; j++) { jsondata[j]; }; }

  9. Unity 使用 Stripping Level == Use micro mscorlib 导致 MD5.Create() 返回NULL

    这几天在弄资源更新,昨天导出Android APK 到手机上測试,发现MD5 校验的时候一直出错.打出Log 又一次导包測试发现 MD5.Create() 返回NULL 可是在电脑上是好好的,在手机上 ...

随机推荐

  1. Struts2实现文件上传(四)

    Struts2实现文件上传 配置文件struts.xml <!-- /* * $Id: struts.xml 1364077 2012-07-21 12:57:02Z lukaszlenart ...

  2. Hibernate中的条件查询完成类

    Hibernate中的条件查询有以下三个类完成: 1.Criteria:代表一次查询 2.Criterion:代表一个查询条件 3.Restrictions:产生查询条件的工具类

  3. Java中的StringBuffer

    Java中的StringBuffer /** * */ package com.you.model; /** * @author YouHaidong * */ public class StrFoo ...

  4. devDependencies和dependencies的版本写法

    devDependencies和dependencies的版本写法 指定版本:比如1.2.2,遵循大版本.次要版本.小版本的格式规定,安装时只安装指定版本. 波浪号(tilde)+指定版本:比如~1. ...

  5. 零基础6个月学好java月薪1w+看看他是怎么学好java的

    21世纪进入信息时代,信息科技给人类的生产和生活方式带来了深刻的变革,信息产业已成为推动国家经济发展的主导产业之一,Java作为含金量极高的一门IT技术,很多人希望从事这个行业,那么想学好Java,要 ...

  6. C#图解教程 第二十三章 预处理指令

    预处理指令 什么是预处理指令基本规则#define和#undef指令条件编译条件编译结构诊断指令行号指令区域指令#pragma warning 指令 预处理指令 什么是预处理指令 源代码指定了程序的定 ...

  7. css补充

    (一)水平对齐1.使用margin属性水平对齐可通过将左和右外边距设置为 "auto",来对齐块元素.除非已经声明了 !DOCTYPE,否则使用 margin:auto 在 IE8 ...

  8. python访问mysql和redis

    1. 修改mysql配置文件 修改bind-address=0.0.0.0(允许通过远程网络连接) 2. 修改redis配置文件 修改bind-address=0.0.0.0(允许通过远程网络连接), ...

  9. 【BZOJ2005】【NOI2010】能量采集(莫比乌斯反演,容斥原理)

    [BZOJ2005][NOI2010]能量采集(莫比乌斯反演,容斥原理) 题面 Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量 ...

  10. [BZOJ4292] [PA2015] Równanie

    Description 对于一个正整数n,定义f(n)为它十进制下每一位数字的平方的和.现在给定三个正整数k,a,b,请求出满足a<=n<=b且k*f(n)=n的n的个数. Input 第 ...