1. 程式人生 > >刪除字典中的null 以便NSUserDefaults儲存

刪除字典中的null 以便NSUserDefaults儲存

      我們在處理伺服器傳過來的資料過程中,如果資料中出現null,我們是沒法進行本地持久化處理的。在使用NSUserDaults儲存本地時,如果其中一個欄位的value為NULL值,就會出現崩潰。

PS: NSUserDefaults只支援: NSString, NSNumber, NSDate, NSArray, NSDictionary.

null產生原因

null是後臺在處理資料的時候,如果沒有設定預設的value值,資料庫預設填充的值,就為null值,從伺服器傳過來,我們json or xml解析成null值。

解決辦法

伺服器端做好處理,讓所有的欄位對應都有預設的不為空的值

本地做刪除null處理

本地做刪除null處理

如果是資料庫做處理的話,可以在資料庫中,將未設定的value填充為" "即可。

如果是本地處理的話,我個人是通過新增類別來達到效果的。

//

//  NSDictionary+MyDelete.h

//

//  Created by Christopher on 16/3/10.

//  Copyright © 2016 Sky. All rights reserved.

//

#import <Foundation/Foundation.h>

@interface NSDictionary (MyDelete)

- (NSDictionary

*)deleteAllNullValue;

@end

//

//  NSDictionary+MyDelete.m

//

//  Created by Christopher on 16/3/10.

//  Copyright © 2016Sky. All rights reserved.

//

#import "NSDictionary+MyDelete.h"

@implementation NSDictionary (MyDelete)

- (NSDictionary *)deleteAllNullValue{

NSMutableDictionary *mutableDic = [[NSMutableDictionaryalloc

]init];

    for (NSString *keyStrinself.allKeys) {

        if ([[selfobjectForKey:keyStr]isEqual:[NSNullnull]]) {

            [mutableDic setObject:@"" forKey:keyStr];

        }

        else{

            [mutableDic setObject:[self objectForKey:keyStr] forKey:keyStr];

        }

    }

    return mutableDic;

}

@end


/** 當需要將後臺返回資料本地化儲存時,直接呼叫上述方法將 null 轉換即可 **/

NSUserDefaults * defaults = [NSUserDefaultsstandardUserDefaults];

//儲存登陸後的資訊

NSMutableDictionary *userDict = [NSMutableDictionarydictionaryWithDictionary:[fetcherDicobjectForKey:@"userInfoVo"] ];

//將返回的null型別的物件轉換成""

NSMutableDictionary *userDic = (NSMutableDictionary *)[userDictdeleteAllNullValue];

[defaults setObject:userDicforKey:kDefaultUserKey];

[defaults synchronize];