NSUserDefaults數(shù)據(jù)保存報錯:Attempt to set a non-property-list object...

在使用NSUserDefaults的時候存入數(shù)據(jù)有時候會報以下錯誤:

Attempt to set a non-property-list object {
   appkey = 101021;
   authType = 1;
   avatar = "QnYun_pic_1476082244810-1329019310.jpg";
    deviceId = "FC8A1F88-53F6-48F4-B5F6-B18C0B251E8F";
    devices = "53,54,55,56,58,59,60,62,63,64,67,69,74,81,83,98,103,105,111,113,115,116,122,123";
    email = "<null>";
    firstName = vsucvxj;
    lastName = 1233;
    login = GENERAL;
   loginToken = 32766F72FAEB8F5B491B313B9EBE1171D2EB17EFA05D6196BE9D3EA5DDE350FC04A5038C628C8735;
    orgCode = "";
   orgID = A10001394;
    otpDev = "<null>";
   phone = 15010163400;
    serviceToken = "<null>";
    token = 6FC949C9F66E417FCE32C15361DDF1AED2EB17EFA05D6196BE9D3EA5DDE350FC04A5038C628C8735;
   topOrgID = A10001394;
   userCode = "<null>";
    userID = 10004000335;
   userName = purchase01;
} as an NSUserDefaults/CFPreferences value for key userInfoDic

原因:dic 是服務(wù)器返回的數(shù)據(jù) 數(shù)據(jù)里邊有"<null>",而NSUserDefaults是不能被成功解析并存入的,所有在存入之前需要將里邊的"<null>"改成""即可。

處理從服務(wù)返回的NSDictionary值為NSNull或者<null>問題

- (id) processDictionaryIsNSNull:(id)obj{  
    const NSString *blank = @"";  
  
    if ([obj isKindOfClass:[NSDictionary class]]) {  
        NSMutableDictionary *dt = [(NSMutableDictionary*)obj mutableCopy];  
        for(NSString *key in [dt allKeys]) {  
            id object = [dt objectForKey:key];  
            if([object isKindOfClass:[NSNull class]]) {  
                [dt setObject:blank  
                             forKey:key];  
            }  
            else if ([object isKindOfClass:[NSString class]]){  
                NSString *strobj = (NSString*)object;  
                if ([strobj isEqualToString:@"<null>"]) {  
                    [dt setObject:blank  
                           forKey:key];  
                }  
            }  
            else if ([object isKindOfClass:[NSArray class]]){  
                NSArray *da = (NSArray*)object;  
                da = [self processDictionaryIsNSNull:da];  
                [dt setObject:da  
                       forKey:key];  
            }  
            else if ([object isKindOfClass:[NSDictionary class]]){  
                NSDictionary *ddc = (NSDictionary*)object;  
                ddc = [self processDictionaryIsNSNull:object];  
                [dt setObject:ddc forKey:key];  
            }  
        }  
        return [dt copy];  
    }  
    else if ([obj isKindOfClass:[NSArray class]]){  
        NSMutableArray *da = [(NSMutableArray*)obj mutableCopy];  
        for (int i=0; i<[da count]; i++) {  
            NSDictionary *dc = [obj objectAtIndex:i];  
            dc = [self processDictionaryIsNSNull:dc];  
            [da replaceObjectAtIndex:i withObject:dc];  
        }  
        return [da copy];  
    }  
    else{  
        return obj;  
    }  
} 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • //聯(lián)系人:石虎QQ: 1224614774昵稱:嗡嘛呢叭咪哄 在使用NSUserDefaults的時候插入數(shù)據(jù)有...
    石虎132閱讀 1,303評論 0 9
  • 一直有人留言要步驟,好吧,我就透露一下我真正繪畫起來的步驟吧。 看完驚呆了,沒錯,我就是這么個不按常理出牌的野路子...
    四月青閱讀 502評論 8 17
  • 引子 -- 為什么要引入注釋? 經(jīng)常會忘記自己的代碼的意圖和思路, 導(dǎo)致需要浪費額外的時間去重新理解自己寫的代碼 ...
    patiencing閱讀 590評論 0 0
  • 周末的清晨,被一室暖暖的陽光叫醒。伸出手掌,光影在指間流動。推開窗戶,天空是久別的深藍,幾片白云輕薄如細紗。不時有...
    雨尋wj閱讀 585評論 0 1
  • 這是讀了學(xué)校圖書館的藏書《 HTML 開發(fā)王》之后所做的一些筆記,此書成書時間為2008年,采用 HTML 4.0...
    蘇之辛閱讀 411評論 0 1

友情鏈接更多精彩內(nèi)容