刪除字典中的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
@end
//
// NSDictionary+MyDelete.m
//
// Created by Christopher on 16/3/10.
// Copyright © 2016年Sky. All rights reserved.
//
#import "NSDictionary+MyDelete.h"
@implementation NSDictionary (MyDelete)
- (NSDictionary *)deleteAllNullValue{
NSMutableDictionary *mutableDic = [[NSMutableDictionaryalloc
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];