【发布时间】:2011-12-18 20:34:32
【问题描述】:
我们有一个使用 Core Data 的应用。 在下一个版本中,我想在已经存在的实体中添加一个新实体。
是否可以添加新的然后从软件中填充它,或者有什么我需要考虑的?
【问题讨论】:
我们有一个使用 Core Data 的应用。 在下一个版本中,我想在已经存在的实体中添加一个新实体。
是否可以添加新的然后从软件中填充它,或者有什么我需要考虑的?
【问题讨论】:
有几种类型的迁移。最简单的是带有推断映射模型的轻量级迁移——这意味着您只需告诉它进行迁移,其余的由软件处理。然而,需要注意的是,它只能应对某些类型的变化。添加实体应该没问题。
要启用轻量级迁移,您需要在打开持久存储时传入几个选项:
NSMutableDictionary *options = [[NSMutableDictionary alloc] init];
[options setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
[options setObject:[NSNumber numberWithBool:YES] forKey:NSInferMappingModelAutomaticallyOption];
NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
最后要做的一件事是在更改数据模型时,您需要添加模型版本。在 Xcode 4 中,在侧边栏中选择您的数据模型,从 Editor 菜单中选择 Add Model Version,然后命名您的新版本。然后您需要将新版本设置为活动版本:再次从左侧边栏中选择您的主数据模型文件,然后在右侧边栏中的第一个选项卡中,应该有一个“版本化数据模型”弹出菜单。
这是非常重要的。要进行迁移,Core Data 需要创建旧存储时使用的模型版本,以及要迁移到的版本。如果您没有旧版本,迁移将失败。
【讨论】:
更改模型是一项艰巨的任务。理论上,只添加一个实体应该很容易,但 Apple 为该任务内置了一个迁移工具。 (这是为了防止您更改现有数据的结构)
我之前迁移过 Core Data 数据库,但在 MAC OS 上,那是 2 年前的事了。
这里是指南
【讨论】: