iOS使用NSUserDefaults 存储数据报Attempt to set a non-property-list object as an NSUserDefaults value的错误解决

当尝试使用NSUserDefaults存储非基本数据类型对象时,会出现'Attempt to set a non-property-list object as an NSUserDefaults value'错误。该错误表明试图存储的对象不是NSArray、NSDictionary、NSData、NSNumber等类型。本文介绍了作者遇到的因后台返回空字段值导致的问题,并提供了存储、获取和删除这类数据的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、参考文章

      http://stackoverflow.com/questions/19720611/attempt-to-set-a-non-property-list-object-as-an-nsuserdefaults

     http://www.wahenzan.com/a/mdev/ios/2015/0106/1446.html


2.出现问题的原因

    NSUserDefaults只能保存诸如NSArray、NSDictionary、NSData、NSNumber等基本数据类型,如果我们强制保存自定义的类或者出现一个Framework不能识别的类,就会出现这个错误:Attempt to set a non-property-list object as an NSUserDefaults value  ,解释起来:【试图将一个非属性列表对象设置为 NSUserDefaults】。

3、我遇到的问题

    我的问题是后台给我返回的数据出现一个空字段值系统不能识别认为是我自己定义的(sex = "<null>")。

   dic =     {
        headThumbPic = "uploads/test/2016/0311/f024004145767840456767.jpg";
        id = 5152;
        nickName = 8315;

        sex = "<null>";

        stype = 1;
    };

4、解决办法

  For save

   NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
   NSData *data = [NSKeyedArchiver archivedDataWithRootObject:yourObject];
   [currentDefaults setObject:data forKey:@"yourKeyName"];


For Get

   NSData *data = [currentDefaults objectForKey:@"yourKeyName"];
   yourObjectType * token = [NSKeyedUnarchiver unarchiveObjectWithData:data];


For Remove

   [currentDefaults removeObjectForKey:@"yourKeyName”];
   Attempt to set a non-property-list object





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值