后台返回null iOS
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的更多相关文章
- iOS 后台返回json解析出现的null的解决办法
在后台返回值为Null为空时,我们代码没有判断时,程序就会崩溃.当时一直很疑惑是为啥,后来发现是数据问题,由于服务器的数据库中有些字段为空,然后以Json形式返回给客户端时就会出现这样的数据.当我们通 ...
- iOS 用webView加载后台返回的HTML数据
返回数据: <p><b>\U516c\U53f8\U7b80\U4ecb</b></p><p> \U5584\U76c8\U7ba1\ ...
- [bug] 前台表单添加数据,后台返回成功消息,但数据库相应字段值为null
原因 前端代码中输入框字段值和后端定义的属性值不一致 分析 bean . controller 如下图,浏览器收到后台返回消息,在后台也可打印user信息,说明已成功接收前端JSON数据并转换为use ...
- Android Fragment getActivity返回null解决
在Android开发中,如果我们用到V4包里面的Fragment,在应用被切换到后台的时候,Activity可能被回收,但是创建的所有Fragment则会被保存到Bundle里面,下面是Fragmen ...
- js循环处理后台返回的json数组
<script type="text/javascript"> function gongdan_search(elm){ var dangqian_value=$(e ...
- thinkphp3.2.3使用ajax 的一些坑——使用AjaxReturn()后,直接返回null,模板文件不起作用
从接触thinkphp到今天,填完此坑,必有其他的坑有会冒出来.哎!这个填坑之路我想是没有尽头的了. 最近,需要使用ajax完成一些操作,一开始想Ajax简单啊,不过是一种提交数据的方式,不过是害苦了 ...
- SpringMVC系列(十一)把后台返回的数据转换成json、文件下载、文件上传
一.后台返回的数据转换成json 1.引入转换json需要的3个依赖 <!--json转换需要的依赖 begin --> <dependency> <groupId> ...
- js前台遍历后台返回的Datatable数据
jsondata 后台返回的datatable ) { ; j < jsondata.length; j++) { jsondata[j]; }; }
- Unity 使用 Stripping Level == Use micro mscorlib 导致 MD5.Create() 返回NULL
这几天在弄资源更新,昨天导出Android APK 到手机上測试,发现MD5 校验的时候一直出错.打出Log 又一次导包測试发现 MD5.Create() 返回NULL 可是在电脑上是好好的,在手机上 ...
随机推荐
- USB设备驱动概述
USB设备驱动 · )USB Hub:每个USBHost控制器都会自带一个USB Hub,被称为根(Root)Hub.这个根Hub可以接子(Sub)Hub,每个Hub上挂载USB设备.一般PC有8个 ...
- 异常-----freemarker.template.TemplateException
一,案例一 1.1.错误描述 五月 30, 2014 11:33:57 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Templ ...
- Eclipse去除网上复制下来的来代码带有的行号
一.正则表达式去除代码行号 作为开发人员,我们经常从网上复制一些代码,有些时候复制的代码前面是带有行号,如: MyEclipse本身自带有查找替换功能,并且支持正则表达式替换,使用正则替换就可以很容易 ...
- 数据库获取map数据后转化成json格式的数据
一,从数据库查出来的数据 两张表先各自左外连接,然后在相互左外连接查找省市县的数据(业务需求必须这样做,省市去的是第一张表,而市县取的是第二张表,两张表中间通过市的名字连接)见这个博文的最后一张图片 ...
- Hibernate【与Spring整合】
前言 前面已经学习了如何使用Spring与Struts2进行整合,本博文主要讲解如何使用Spring对Hibernate进行整合 Spring和Hibernate整合的关键点: SessionFact ...
- 【BZOJ1189】紧急疏散(二分答案,最大流)
[BZOJ1189]紧急疏散(二分答案,最大流) 题面 Description 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是'.',那么表示这是一块空地:如果是 ...
- [Luogu4230]连体病原体
题面戳我 sol 很好想+很好写的一道题,然而比赛中我还是没有切掉qaq. LCT 枚举左端点\(i\),向右移动右端点指针\(j\)找到第一个成环的位置.此时\([i,j],[i,j+1]...[i ...
- xctf的一道题目(77777)
这次比赛我没有参加,这是结束之后才做的题目 题目链接http://47.97.168.223:23333 根据题目信息,我们要update那个points值,那就是有很大可能这道题目是一个sql注入的 ...
- C#中的函数式编程:序言(一)
学了那么久的函数式编程语言,一直想写一些相关的文章.经过一段时间的考虑,我决定开这个坑. 至于为什么选择C#,在我看来,编程语言分三类:一类是难以进行函数式编程的语言,这类语言包括Java6.C语言等 ...
- XAMPP搭建PHP
在学习一些前后端交互时,经常会有跟PHP作为后端(服务器)的交互,不能将php文件放在本地进行请求,必须将PHP运行在Apache环境中.但是对一些新手来说,学习搭建一个Apache环境也并非易事,所 ...