我有一个非常复杂的问题,我想与你分享,也许有人可以为我解答。 在我开始之前,我必须说我在这方面很新。
所以,我有一个使用预先填充的SQL数据库的coredata iphone应用程序(很像食谱应用程序)。 用户可以添加/编辑自己的数据,但无法删除默认数据。 useres数据全部保存在同一个sql数据库中。
问题: 我需要做什么才能: - 更新存储在sql数据库中的一些(不是全部)默认数据而不“触摸”用户的数据? (模型将保持不变 - 没有新的实体等 - ) (如果用户卸载应用程序,然后重新安装新版本,一切都会好的,但显然我不想这样做。)
有人可以帮助编码吗?
答案 0 :(得分:2)
为了支持稍后添加新实体等,您需要使用版本控制和自动轻量级迁移,如下所述:
基本上,您使用Xcode中的Design->Data Model
菜单项创建数据模型的新版本,然后进行一些代码更改。这将导致Core Data自动将旧模型迁移到较新模型。您可以进行哪些类型的更改。您可以添加新实体,并将可选属性添加到现有实体,或者将默认值设置为必需属性。
让我感到震惊的一件事是,当您想要使用版本控制和迁移时,加载核心数据NSManagedObjectModel
的方式会发生变化。如果没有迁移,你可能会这样:
NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
开始使用版本控制和迁移后,需要将其更改为:
NSString *path = [[NSBundle bundleForClass:self.class] pathForResource:@"DataModelName"
ofType:@"momd"];
NSURL *url = [NSURL fileURLWithPath:path];
NSManagedObjectModel *model = [[[NSManagedObjectModel alloc] initWithContentsOfURL:url] autorelease];
答案 1 :(得分:1)
核心数据明确支持模型版本控制,并提供在版本之间迁移数据的工具。这应该包含您需要的信息。 Link to Developer Docs for Migration
答案 2 :(得分:0)
由于您输入了默认数据,因此您必须知道这些记录的ID /密钥。您只需要一个可以更改默认数据的更新脚本。