請求接口獲取到的數據其中出現null值,處理的時候致使了程序crash,解決方案以下:

第一種方法是使用分類給字典添加一個類方法,將字典中的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];  

相關文章
相關標籤/搜索