NSUserDefaults:使用不同的自定义对象存储数组

时间:2016-01-08 07:19:24

标签: objective-c nsuserdefaults

我的数组包含:

  • 没有
  • 只有一个字符串对象
  • 多个自定义对象
  • 字符串和多个自定义对象

NSUserDefaults

关于此的简短背景:

  

我有两个对象之间的核心数据关系。因此,实体A的任何对象都可以属于实体B中包含的类别或属于任何类别。我有一个搜索窗口,您可以查看特定类别和/或不属于任何类别的对象。这个类别我基本上都不会在我的过滤器数组中保存为特定的字符串。

但我总是得到错误:

  

尝试插入非属性列表对象。

由于我的自定义对象,这是我现在研究的内容。但是我还可以在这个数组中存储字符串并混合对象类型吗?我还考虑过为每个对象分配一个默认类别,但我认为它更干净,没有类别,只在我需要它的地方使用此字符串,在我的应用程序中使用过滤器。

1 个答案:

答案 0 :(得分:0)

您需要为此目的使用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 获取对象时使用

[NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults]objectForKey:kUserInfo]]