iOS-数据返回字段null、<null>导致的程序crash问题解决
来源:互联网 发布:tableview卡顿优化 编辑:程序博客网 时间:2024/05/23 13:33
在iOS开发过程中经常需要与服务器进行数据处理,但是在数据接通过程中会出现:null “”等问题导致莫名其妙的崩溃。相信你一定会写各种判断来处理这些异常,甚至你还会一个一个接口的去改,折让我们实在是心灰意冷。
再者可能你会写个分类 调它。这样也会让你非常的苦恼!
最近发现一个比较好的解决方法:前提是你用的是AFNetworking第三方。
设置下面属性:
serializer.removesKeysWithNullValues = YES;
在哪里设置呢?搜索AFURLResponseSerialization.m类,在定位到AFJSONResponseSerializer类,如下图:
然后定位:AFJSONObjectByRemovingKeysWithNullValues
static id AFJSONObjectByRemovingKeysWithNullValues(id JSONObject, NSJSONReadingOptions readingOptions) { if ([JSONObject isKindOfClass:[NSArray class]]) { NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:[(NSArray *)JSONObject count]]; for (id value in (NSArray *)JSONObject) { [mutableArray addObject:AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions)]; } return (readingOptions & NSJSONReadingMutableContainers) ? mutableArray : [NSArray arrayWithArray:mutableArray]; } else if ([JSONObject isKindOfClass:[NSDictionary class]]) { NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithDictionary:JSONObject]; for (id <NSCopying> key in [(NSDictionary *)JSONObject allKeys]) { id value = (NSDictionary *)JSONObject[key]; if (!value || [value isEqual:[NSNull null]]) { //这里是本库作者的源代码 //[mutableDictionary removeObjectForKey:key]; //下面是改动后的,将空指针类型改为空字符串 mutableDictionary[key] = @""; } else if ([value isKindOfClass:[NSArray class]] || [value isKindOfClass:[NSDictionary class]]) { mutableDictionary[key] = AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions); } } return (readingOptions & NSJSONReadingMutableContainers) ? mutableDictionary : [NSDictionary dictionaryWithDictionary:mutableDictionary]; } return JSONObject;}
修改部分就是将空指针value改为空字符串。
如果你没有用AF也没有关系下面我们来看看这个终极解决的办法:
终于找到了一劳永逸的方案,牛逼的老外写了一个Category,叫做NullSafe ,在运行时操作,把这个讨厌的空值置为nil,而nil是安全的,可以向nil对象发送任何message而不会奔溃。这个category使用起来非常方便,只要加入到了工程中就可以了,你其他的什么都不用做,对,就是这么简单。详细的请去Github上查看;
解压文件之后,直接将NullSafe.m文件导入到项目中就行了。
https://github.com/nicklockwood/NullSafe
但是第二种方法不知道是不是已经有AFNetworking的缘故,我自行倒入后发现没有效果,可能是和AFNetworking冲突的缘故吧。
阅读全文
1 0
- iOS-数据返回字段null、<null>导致的程序crash问题解决
- iOS JSON返回的数据有NSNull导致程序崩溃及ios nil、NULL和NSNull的区别
- iOS开发中后台返回null,<null>字段的处理
- iOS项目中由于后台数据返回null导致的错误解决
- iOS项目中由于后台数据返回null导致的错误解决
- hibernate添加数据,默认字段为null的问题解决
- 关于springmvc 返回json数据null字段的显示问题
- iOS 去除后台返回的数据的null值
- IOS 返回JSON数据中存在NULL的解决办法
- IOS 中的服务器返回数据(null)和 <null>的处理方法
- iOS-nil、Nil、NULL和NSNull区别详细说明(去除数据请求返回的null)
- iOS - CoreData服务器数据返回是"<null>":
- 获取的某个数据为null时,程序crash的解决办法
- Null导致闪退crash,解决方法
- iOS开发服务器返回(null) 与<null>的处理
- iOS中解决后台返回的null导致的崩溃问题
- 关于Fragment中的getActivity()返回null导致程序崩溃的解决方案
- iOS项目开发中,对后台返回数据为<null>时候的处理,避免取值产生程序崩溃问题
- bootstrap中的dropdown组件扩展hover事件
- AngularJS追加文本自定义弹窗
- 代理:Proxy和Cglib
- 客户端存储
- springmvc整合ueditor,ueditor修改上传路径及页面回显问题
- iOS-数据返回字段null、<null>导致的程序crash问题解决
- sass快速手册
- django框架model
- 关于MySQL的2013-Lost connection to MySQL server at 'warting for initial communication packet'.error 0
- 百度UNIT平台
- JDK7中ReadWriteLock源码概述
- Java常见异常
- 程序员面试总结-java高级工程师(二)
- 关于vs2010运行C程序时,运行结果窗口一闪而过的问题