我是这个发展的新手。
我想将类的完整对象存储到我的数据库中。 实际上我正在创建应用程序,其中用户可以向父视图添加多个视图并想要保存它,以便下次当用户获取它时,他将获得他保存的内容,即之前查看到父视图。
任何相同的逻辑或建议都会有所帮助,
提前致谢
答案 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