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

 

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

image

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

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

PaymentModel.h

@interface PaymentModel : NSObject

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

@end

PaymentModel.m

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

你可能感兴趣的:(iOS开发)