在iPhone中将完整的类对象存储到数据库中

时间:2012-03-08 10:04:13

标签: iphone ios database class object

我是这个发展的新手。

我想将类的完整对象存储到我的数据库中。 实际上我正在创建应用程序,其中用户可以向父视图添加多个视图并想要保存它,以便下次当用户获取它时,他将获得他保存的内容,即之前查看到父视图。

任何相同的逻辑或建议都会有所帮助,

提前致谢

3 个答案:

答案 0 :(得分:3)

您要保存的任何对象都需要符合NSCoder协议。请记住,如果您的父对象中有自定义对象,则它们需要符合NSCoder。将以下方法添加到自定义类中。

- (id)initWithCoder:(NSCoder *)coder {
  _inventory = [[coder decodeObjectForKey:@"inventory"] retain];

  return self;
}

- (void)encodeWithCoder:(NSCoder *) encoder{
  [encoder encodeObject:_inventory forKey:@"inventory"];
} 

在上面的示例中,我想对玩家的广告资源进行编码。如果库存包含自定义对象(例如,与一堆NSStrings相对),他们还需要自己的NSCoder方法。

下面我将其转换为可以保存到NSUserDefaults的内容。适当调整以存储在DB中。请记住,如果您想通过线路发送NSData以存储在数据库中,您需要将其转换为Base64并可能将其压缩。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData * encodedObject = [NSKeyedArchiver archivedDataWithRootObject:rootObject];

[defaults setObject:encodedObject forKey:kSaveArchiveKey];
[defaults synchronize];

换句话说,你会想要抓住你的NSData,做上面描述的任何魔法(base64,压缩)和unarchive。

PlayerInventory *inventory = [NSKeyedUnarchiver unarchiveObjectWithData:playerInventoryData]

答案 1 :(得分:1)

您应根据具体需要在NSCoding和Core Data之间进行选择。有关详情,请参阅此帖子:NSCoding VS Core data

答案 2 :(得分:0)

您可以在数据库中存储任何对象的状态(任何属性的值)。您应该使用NSCoding.Example here