1. 程式人生 > >iOS NSUserDefaults setObject forKey,本地化儲存,刪除字典中的null,空值,本地化的時候,如果value為空值所引起的崩潰

iOS NSUserDefaults setObject forKey,本地化儲存,刪除字典中的null,空值,本地化的時候,如果value為空值所引起的崩潰

刪除字典中的null

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

null產生原因

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

解決辦法

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

本地做刪除null處理

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

如果是本地處理的話,我個人是通過新增類別

來達到效果的。

程式碼如下:

//
//  NSDictionary+MyDictionary.h
//  Plus2
//
//  Created by 張國榮 on 16/2/24.
//  Copyright © 2016年 zgr. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSDictionary (MyDictionary)
-(NSDictionary *)deleteAllNullValue;
@end

//
//  NSDictionary+MyDictionary.m
//  Plus2
//
//  Created by 張國榮 on 16/2/24.
//  Copyright © 2016年 zgr. All rights reserved.
//

#import "NSDictionary+MyDictionary.h"

@implementation NSDictionary (MyDictionary)
- (NSDictionary *)deleteAllNullValue{
    NSMutableDictionary *mutableDic = [[NSMutableDictionary alloc] init];
    for (NSString *keyStr in self.allKeys) {
        if ([[self objectForKey:keyStr] isEqual:[NSNull null]]) {
            [mutableDic setObject:@"" forKey:keyStr];
        }
        else{
            [mutableDic setObject:[self objectForKey:keyStr] forKey:keyStr];
        }
    }
    return mutableDic;
}
@end