"等问题导致莫...">
美文网首页
关于ios “”的异常处理

关于ios “”的异常处理

作者: 6bbe3ffd9b9b | 来源:发表于2019-05-20 10:32 被阅读0次

在iOS开发过程中经常需要与服务器进行数据通讯,但是在数据接通过程中会出现:null "<null>"等问题导致莫名其妙的崩溃。
相信你一定会写各种判断来处理这些异常,甚至你还会一个一个接口的去改,折让我们实在是心灰意冷。
再者可能你会写个分类 调它。这样也会让你非常的苦恼!
最近发现个处理的方法

如果你使用AFNetwork 这个库做网络请求的话,可以用以下代码,自动帮你去掉这个讨厌的空值:

self.removesKeysWithNullValues = YES;
这样就可以删除掉含有null指针的key-value。
但有时候,我们想保留key,以便查看返回的字段有哪些。没关系,我们进入到这个框架的AFURLResponseSerialization.m类里,利用搜索功能定位到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

1111111.png

相关文章

  • 关于ios “”的异常处理

    在iOS开发过程中经常需要与服务器进行数据通讯,但是在数据接通过程中会出现:null ""等问题导致莫...

  • iOS null 的异常处理

    在iOS开发过程中经常需要与服务器进行数据通讯,Json就是一种常用的高效简洁的数据格式。 问题现象 但是几个项目...

  • 关于ios “<null>”的异常处理

    在iOS开发过程中需要与服务器进行数据通讯,但是问题来了,接口返回的数据中会出现:null ""等问题...

  • nil,Nil,null,NSNull的区别

    各自的含义: iOS开发服务器返回(null) 与的处理

  • NSNull & nil & Nil & NULL & Nul

    关于iOS开发中服务器返回null引起的崩溃,我想凡是iOS开发者都应该遇到过上述问题。对null值的处理大家想必...

  • Future使用原则

    1. 异常处理 whenComplete((result,ex)-> { if(null != ex) { // ...

  • iOS中关于(null)和<null>的处理

    在开发过程中会遇到很多空的情况,有时候是个空字符串,有时候取得对象(null),还有时候会得到的情况,那么这几种情...

  • 04. NULL检查机制

    Kotlin 空安全检查机制,有多种处理方式。可以使用 !! 符号,抛出异常可以使用 ? 认可NULL对 NULL...

  • iOS异常处理

    开发iOS应用,解决Crash问题始终是一个难题。Crash分为两种,一种是由EXC_BAD_ACCESS引起的,...

  • iOS异常处理

    尽管当iphone应用崩溃时,它不会告诉用户发生了什么,但我们仍然可以为应用添加异常和信号处理,以此记录和展示发生...

网友评论

      本文标题:关于ios “”的异常处理

      本文链接:https://www.haomeiwen.com/subject/ibphzqtx.html