将核心数据添加到实体

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

只要添加新的,然后从软件中填充它,或者有什么我必须考虑?

有几种types的迁移。 最简单的方法是使用推断的映射模型进行轻量级迁移 – 这意味着您只需告诉它进行迁移,而软件将处理其余部分。 但是要注意的是,它只能应付某种变化。 添加一个实体应该是可以的。

要启用轻量级迁移,您需要在打开持久性存储时传递一些选项:

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

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

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

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

这是指南

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