core-data - 我需要做什么才能让 Core Data 自动迁移模型?

标签 core-data

我已阅读有关核心数据模型自动/轻量级迁移的文档 - 但我在实现它时遇到问题。

据我了解,应用程序应该注意到它拥有的模型和设备上已经存在的模型不相同。如果您仅添加了属性或关系以及类似的简单更改,那么模型应该会自动升级。

任何指示 - 我需要在 Xcode 中设置某些内容吗?

最佳答案

我现在发现这非常简单 - 一旦你知道去哪里寻找。

在我的 AppDelegate 中,我设置了 NSPercientStoreCoordinator - 您需要向其添加一些选项以告诉它处理自动迁移:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:

[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,

[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

NSError *error;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];

if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
    // Handle error
    NSLog(@"Problem with PersistentStoreCoordinator: %@",error);
}

那么你需要在 xCode 中做一些小技巧:

  1. 选择您的 xcdatamodel 文件
  2. 选择顶部的“设计”菜单 - 然后选择“数据模型” - 然后选择“添加模型版本”
  3. 然后,您的 xcdatamodel 文件将被移动到一个与您的 xcdatamodel 文件同名但扩展名为 xcdatamodeld 的新目录中 - 该目录中将有第二个文件,名称中带有 2。选择新文件,然后选择“设计”->“数据模型”->“设置当前版本”( in Xcode 4 you do this )
  4. 如果您已经进行了导致项目不兼容的更改,请从原始 xcdatamodel 文件中删除这些更改。如果您尚未进行更改 - 那么只需编辑 2.xcdatamodel 文件(您刚刚创建的当前版本)。
  5. 现在,当您将此版本安装到具有旧型号的设备上时 - 它会自动将该型号升级到新型号。

这看起来很棒并且像我想要的一样简单 - 但我认为您在开发过程中更改模型时需要小心 - 否则您将必须为每次更改创建一个新版本。

我认为我要做的是保留所有更改的文件,然后一旦准备好部署更新,我将删除所有中间文件并仅使用最旧和最新的模型进行部署。

<小时/>

更新(2011 年 7 月 15 日):

感谢@rockstarberlin指出苹果有更新的文档:

Xcode 4: Setting a Managed Object Model’s Current Version

更新:2013 年 8 月 19 日更好的链接:

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmModelFormat.html

关于core-data - 我需要做什么才能让 Core Data 自动迁移模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1018155/

相关文章:

ios - +entityForName : nil happens intermittently

ios - Swift:保存(覆盖)和加载 CoreData

objective-c - 核心数据 : Keypath Error Not Found in Entity <NSSQLEntity Studies id=3>

ios - 将新数据插入核心数据存储时如何使 UICollectionView 始终位于底部

ios - CoreData 获取实体

iphone - 我应该使用核心数据来存储一些用户偏好,还是将其保存在 NSUserDefaults 中?

ios - 无法将 TableView 平滑地动画化到底部插入的新单元格

objective-c - 处理核心数据模型对象的效率

cocoa - 在核心数据中是否有任何内置机制可以将特定实体的实例限制为最大数量?

ios - iOS 13 Core Data 持久化存储迁移过程中出现错误