前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NSUserDefaults数据保存报错:Attempt to set a non-property-list object.

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

作者头像
honey缘木鱼
发布2018-08-02 15:09:44
8770
发布2018-08-02 15:09:44
举报
文章被收录于专栏:娱乐心理测试娱乐心理测试

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

1.这种错误的原因是插入了不识别的PaymentModel数据类型,NSUserDefaults支持的数据类型有NSString、 NSNumber、NSDate、 NSArray、NSDictionary、BOOL、NSInteger、NSFloat等系统定义的数据类型。想保存自定义的数据类型时,我们可以转成NSData再存入。

将PaymentModel类型变成NSData类型就必须实现归档,在PaymentModel.h文件中遵守NSCoding协议,在PaymentModel.m文件中实现encodeWithCoder和initWithCoder 方法。如下所示:

PaymentModel.h

代码语言:javascript
复制
@interface PaymentModel : NSObject<NSCoding>

//标题
@property (nonatomic, copy)NSString *title;
//图片
@property (nonatomic, copy)NSString *picture;

@end

PaymentModel.m

代码语言:javascript
复制
#import "PaymentModel.h"

@implementation PaymentModel

- (void)encodeWithCoder:(NSCoder *)aCoder {
    [aCoder encodeObject:self.title forKey:@"title"];
    [aCoder encodeObject:self.picture forKey:@"picture"];
}

- (id)initWithCoder:(NSCoder *)aDecoder {
    if (self = [super init]) {
        self.title = [aDecoder decodeObjectForKey:@"title"];
        self.picture = [aDecoder decodeObjectForKey:@"picture"];
    }
    return self;
}

@end

2.有时NSUserDefaults报存数组,字典,还是报错,原因是我里边的数据结构有"<null>",而NSUserDefaults是不能被成功解析并存入的,所有在存入之前需要将里边的"<null>"改成""即可。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.07.14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档