我们有一个使用核心数据的应用。 在下一个版本中,我想为现有的实体添加一个新的实体。
可以添加新的,然后从软件中填充它,或者有什么我需要考虑的事情吗?
答案 0 :(得分:15)
有两种类型的迁移。最简单的是使用推断的映射模型进行轻量级迁移 - 这意味着您只是告诉它进行迁移,软件处理其余的。然而,需要注意的是,它只能应对某些变化。添加实体应该没问题。
要启用轻量级迁移,您需要在打开持久性存储时传递一些选项:
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中,选择侧栏中的数据模型,从“编辑器”菜单中选择“添加模型版本”,然后命名新版本。然后你需要将新版本设置为活动版本:再次从左侧边栏选择主数据模型文件,然后在右侧边栏的第一个选项卡中,应该有一个“版本化数据模型”弹出菜单。
这非常重要。要进行迁移,Core Data需要创建旧商店的模型版本,以及要迁移到的版本。如果您没有旧版本,迁移将失败。
答案 1 :(得分:1)
更改模型是一项艰巨的任务。理论上,添加一个实体应该很容易,但Apple内置了一个用于该任务的迁移工具。 (这是在你改变现有数据的结构的情况下)
我以前迁移过核心数据数据库,但是在MAC OS上已经迁移了2年多。
这是指南