首先,NSUserDefaults 是不支持直接存贮NSObject对象的,如果存了会发上崩溃的
如图
我们可以将NSObject对象转化为NSData,然后存储,这时候需要用到NSKeyedArchiver 和 NSKeyedUnarchiver,并且模型页需要实现两个方法如图
存贮和取出的地方这样
代码下所示
- (id)initWithCoder: (NSCoder *)coder
{
if (self = [super init])
{
self.name = [coder decodeObjectForKey:@"name"];
self.gender = [coder decodeObjectForKey:@"gender"];
}
return self;
}
- (void)encodeWithCoder: (NSCoder *)coder
{
[coder encodeObject:_name forKey:@"name"];
[coder encodeObject:_gender forKey:@"gender"];
}```
```objectivec
PersonModel *person = [[PersonModel alloc] init];
person.name = @"你好你好";
person.gender = @"nv";
NSData * personData = [NSKeyedArchiver archivedDataWithRootObject:person];
[[NSUserDefaults standardUserDefaults] setObject:personData forKey:@"kkk"];
NSData *tmpData = [[NSUserDefaults standardUserDefaults] objectForKey:@"kkk"];
PersonModel *tmpPerson = [NSKeyedUnarchiver unarchiveObjectWithData:tmpData];