2011-10-31 114 views
3

我们有一个使用核心数据的应用程序。 在下一个版本中,我想添加一个新的实体到已经存在的实体。将实体添加到核心数据

只要添加新的,然后从软件中填充它,或者有什么我不得不想的?

回答

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中,在边栏中选择您的数据模型,从编辑器菜单中选择添加模型版本,并命名您的新版本。然后,您需要将新版本设置为活动版本:再次从左侧边栏选择主数据模型文件,然后在右侧边栏第一个选项卡中,应该有一个“Versioned Data Model”弹出式菜单。

这是非常重要的。要进行迁移,Core Data需要创建旧商店的模型版本以及要迁移到的版本。如果您没有旧版本,迁移将失败。

+0

谢谢Amorya。我有一个应用程序,我需要在稍后阶段添加一个实体。它目前没有版本,但如果我理解你是对的,我应该在添加实体时添加一个版本。 – Jorgen

1

更改模型是一项艰巨的任务。从理论上讲,只需添加一个实体应该很容易,但Apple为该任务构建了一个迁移工具。 (这是在你改变现有数据的结构的情况下)

我已经迁移了Core Data数据库,但是在MAC OS上它已经在2年前。

这里是引导

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

+0

谢谢你。看起来非常可怕。如果我可以从开始设置实体并将其填充到更高版本中,可能会更好。他们是视频播放列表,但我不知道现阶段的标题。 – Jorgen

+0

是的,我确定我的第一次迁移是我的最后一次:) ...(除非有任何不可预见的数据需求) –