第一種方法是使用分類給字典添加一個類方法,將字典中的null值所有替換爲空字符串,代碼以下:xcode
.h文件代碼:spa
@interface NSDictionary (DeleteNull)code
+ (id)changeType:(id)myObj;rem
@end字符串
.m文件代碼:string
@implementation NSDictionary (DeleteNull)it
//將NSDictionary中的Null類型的項目轉化成@""io
+(NSDictionary *)nullDic:(NSDictionary *)myDictable
{class
NSArray *keyArr = [myDic allKeys];
NSMutableDictionary *resDic = [[NSMutableDictionary alloc]init];
for (int i = 0; i < keyArr.count; i ++)
{
id obj = [myDic objectForKey:keyArr[i]];
obj = [self changeType:obj];
[resDic setObject:obj forKey:keyArr[i]];
}
return resDic;
}
//將NSArray中的Null類型的項目轉化成@""
+(NSArray *)nullArr:(NSArray *)myArr
{
NSMutableArray *resArr = [[NSMutableArray alloc] init];
for (int i = 0; i < myArr.count; i ++)
{
id obj = myArr[i];
obj = [self changeType:obj];
[resArr addObject:obj];
}
return resArr;
}
//將NSString類型的原路返回
+(NSString *)stringToString:(NSString *)string
{
return string;
}
//將Null類型的項目轉化成@""
+(NSString *)nullToString
{
return @"";
}
#pragma mark - 公有方法
//類型識別:將全部的NSNull類型轉化成@""
+(id)changeType:(id)myObj
{
if ([myObj isKindOfClass:[NSDictionary class]])
{
return [self nullDic:myObj];
}
else if([myObj isKindOfClass:[NSArray class]])
{
return [self nullArr:myObj];
}
else if([myObj isKindOfClass:[NSString class]])
{
return [self stringToString:myObj];
}
else if([myObj isKindOfClass:[NSNull class]])
{
return [self nullToString];
}
else
{
return myObj;
}
}
使用方法:
[model setValuesForKeysWithDictionary:[NSDictionary changeType:dict]];
第二種方法是利用AFNetworking的自動解析,去除掉值爲null的鍵值對,我挺推崇這種方案的,但還要看我的喜愛,裝逼一點的就用拓展(我的不推薦)代碼以下:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
AFJSONResponseSerializer *response = [AFJSONResponseSerializer serializer];
response.removesKeysWithNullValues = YES;
manager.responseSerializer = response;
manager.requestSerializer = [AFJSONRequestSerializer serializer];