解决iOS空指针数据的问题

Posted liguangsunls

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决iOS空指针数据的问题相关的知识,希望对你有一定的参考价值。

ios开发中常常会遇到空指针的问题。

如从后台传回来的Json数据,程序中不做推断就直接赋值操作,非常有可能出现崩溃闪退。

为了解决空指针的问题,治标的方法就是遇到一个处理一个。这样业务代码里面就插了非常多推断语句,费时又费力。

如今有一个简单的办法。


利用AFNetworking网络请求框架获取数据。

AFHTTPRequestOperationManager *instance = [AFHTTPRequestOperationManager manager];
AFJSONResponseSerializer *response = (AFJSONResponseSerializer *)instance.responseSerializer;
response.removesKeysWithNullValues = YES;
response.acceptableContentTypes = [NSSet setWithObjects:@"text/json",@"application/json",@"text/html", nil];

这样就能够删除掉含有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;
}

是不是非常easy,一句话,将空指针value改为空字符串。

空指针问题瞬间解决啦,拿去粘贴吧。



以上是关于解决iOS空指针数据的问题的主要内容,如果未能解决你的问题,请参考以下文章

片段中的 EditText 上的空指针异常 [重复]

rootView上的Android片段空指针异常[关闭]

片段中的ArrayAdapter空指针

在使用ViewPager时尝试从其父活动修改片段时出现空指针异常

片段中的空指针异常

片段 getArguments() 空指针异常