【问题标题】:NSUserDefaults: Store array with different and custom objectsNSUserDefaults:使用不同的自定义对象存储数组
【发布时间】:2016-01-08 07:19:23
【问题描述】:
我有一个数组,其中包含:
- 什么都没有
- 只有一个字符串对象
- 几个自定义对象
- 一个字符串和几个自定义对象
到NSUserDefaults。
关于此的简短背景:
我有两个对象之间的核心数据关系。因此,实体 A 的任何对象都可以属于实体 B 中包含的某个类别,也可以不属于任何类别。我有一个搜索窗口,您当然可以在其中查找特定类别和/或不属于任何类别的对象。这个没有类别我基本上保存在我的过滤器数组中作为一个特定的字符串。
但我总是得到错误:
尝试插入非属性列表对象。
由于我的自定义对象,这是我现在所研究的。但是我也可以在这个数组中存储字符串并混合对象类型吗?我还考虑为每个对象分配一个默认类别,但我认为没有类别更简洁,并且在我的应用程序中使用过滤器时,只需在我需要它的唯一地方使用此字符串。
【问题讨论】:
标签:
objective-c
nsuserdefaults
【解决方案1】:
您需要为此使用 NSEncode 和 Decode,尝试以下步骤来实现此目的
1在模型的 .m 文件中
像这样在你的模型类上添加编码解码
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.id forKey:@"ID"];
[aCoder encodeObject:self.address_1 forKey:@"address_1"];
//All of your properties here
}
-(id)initWithCoder:(NSCoder *)aDecoder{
if(self = [super init])
{
self.id = [aDecoder decodeObjectForKey:@"id"];
self.address_1 = [aDecoder decodeObjectForKey:@"address_1"];
//All of your properties here
}
return self;
}
2 将其保存到 NSDefaults 时,首先使用这样的归档
[[NSUserDefaults standardUserDefaults]setObject:[NSKeyedArchiver archivedDataWithRootObject:info] forKey:kUserInfo];
3 获取对象时使用 this
[NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults]objectForKey:kUserInfo]]