解決iOS空指針數據的問題
阿新 • • 發佈:2017-06-12
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空指針數據的問題