将实体添加到核心数据

时间:2011-10-31 15:49:42

标签: ios core-data entity

我们有一个使用核心数据的应用。 在下一个版本中,我想为现有的实体添加一个新的实体。

可以添加新的,然后从软件中填充它,或者有什么我需要考虑的事情吗?

2 个答案:

答案 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年多。

这是指南

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Introduction/Introduction.html