NSUserDefaults数据保存报错:Attempt to set a non-property-list object...

在使用NSUserDefaults的时候存入数据有时候会报以下错误:

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 是服务器返回的数据 数据里边有"<null>",而NSUserDefaults是不能被成功解析并存入的,所有在存入之前需要将里边的"<null>"改成""即可。

处理从服务返回的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;  
    }  
} 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • //联系人:石虎QQ: 1224614774昵称:嗡嘛呢叭咪哄 在使用NSUserDefaults的时候插入数据有...
    石虎132阅读 5,008评论 0 9
  • 一直有人留言要步骤,好吧,我就透露一下我真正绘画起来的步骤吧。 看完惊呆了,没错,我就是这么个不按常理出牌的野路子...
    四月青阅读 3,192评论 8 17
  • 引子 -- 为什么要引入注释? 经常会忘记自己的代码的意图和思路, 导致需要浪费额外的时间去重新理解自己写的代码 ...
    patiencing阅读 3,529评论 0 0
  • 周末的清晨,被一室暖暖的阳光叫醒。伸出手掌,光影在指间流动。推开窗户,天空是久别的深蓝,几片白云轻薄如细纱。不时有...
    雨寻wj阅读 3,477评论 0 1
  • 这是读了学校图书馆的藏书《 HTML 开发王》之后所做的一些笔记,此书成书时间为2008年,采用 HTML 4.0...
    苏之辛阅读 2,860评论 0 1

友情链接更多精彩内容