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

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

##处理从服务返回的NSDictionary值为NSNull或者问题

- (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;  
    }  
} 
复制代码

转载于:https://juejin.im/post/5a31006551882527541050aa

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107833.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 智能家居趋势[通俗易懂]

    智能家居趋势[通俗易懂]光纤到户,宽带提速,提升3G网络的覆盖面和服务质量,推动年内发放4G牌照,全面推进三网融合,年内在试点基础上向全国推广……种种政策告诉我们,互联网将会覆盖全球,上传、下载速度将会大幅度提高,信息时代的到来已是大势所趋。作为对于互联网依赖程度比较深的智能家居,在这样一场浪潮中,将会成为最大的受益者之一,尤其,在目前的经济形势以及技术发展形势中,智能家居代表的已经是新一轮信息技术革命中,价值最大的产业…

    2022年6月22日
    35
  • 汇编语言标志位介绍

    汇编语言标志位介绍一、运算结果标志位1、进位标志CF(CarryFlag)进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。2、奇偶标志PF(ParityFlag)奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如…

    2022年7月12日
    23
  • Navicat15激活码一直生成不了(注册激活)

    (Navicat15激活码一直生成不了)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlHQE565NV3W-eyJsaWNlbnNlSWQi…

    2022年3月28日
    398
  • 软件著作权需要源代码吗_版权生成软件官网

    软件著作权需要源代码吗_版权生成软件官网工作过程写了一个上位机软件,想申请一个软件著作权,其中有一项是提供项目源代码;一个一个文件打开去复制有点太愚蠢了,就想找找有没有什么自动化处理的工具;还真的找到一个,下面分享给大家我是怎么用的;1.解压压缩包,打开工程:2.我用的是VS2017打开毫无障碍:3.最好先清理解决方案,然后再编译运行:4.最后就能见到自动化处理工具了:5.需要的话评论里留言,我再分享给大家;…

    2022年9月22日
    3
  • Java判断对象是否为空的方法:isEmpty,null,” “[通俗易懂]

    Java判断对象是否为空的方法:isEmpty,null,” “[通俗易懂]今天修改辞职同事遗留的代码才发现这个问题,不能用isEmpty来判断一个对象是否为null,之前没在意这个问题,在报了空指针之后才发现这个问题。查了一下关于判断为空的几个方法的区别,这里做一个简单的总结:null一个对象如果有可能是null的话,首先要做的就是判断是否为null:object==null,否则就有可能会出现空指针异常,这个通常是我们在进行数据库的查询操作时,查询结果首…

    2022年6月13日
    95
  • FastJson最新.jar下载

    FastJson最新.jar下载FastJson最新.jar下载地址,作者github地址

    2022年7月13日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号