1. 程式人生 > >解決iOS空指針數據的問題

解決iOS空指針數據的問題

led his instance keys tro 刪除 ren serial split

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空指針數據的問題