0

在更新我的应用程序时,我遇到了很大的概念问题。这是我现在得到的:

  1. 具有 CoreData 生成模型的应用程序,具有给定的捆绑包 ID 等。
  2. 具有 CoreData 生成模型的第二个应用程序,具有与 1 中相同的包 ID。

应用程序版本 1 和 2 之间的模型在删除某些关系和不使用某些模型(也被删除)的方式上有所不同。我刚刚将用户设置移动到用户默认值,而不是从数据库中获取它们,这是一项昂贵的操作。

现在我想用我的第二个版本 (2) 来更新我的应用程序 (1)。我不知道如何在这种情况下进行迁移。我想保留用户设置并将它们从模型 (1) 移动到用户默认值并用模型 (2) 替换模型 (1)。

我已经阅读了关于核心数据迁移的内容,但是这些示例都反映了使用单个项目并创建另一个版本的核心数据模型,因为 (2) 完全是新项目(当然我有访问(1)的源代码)。

我正在考虑使用两个数据库(如果有更好的解决方案,请纠正我),从(1)获取用户设置并将它们写入用户默认值,然后删除数据库(1)并仅使用(2)。如果在我的情况下这是正确的方法,我如何在单个项目中使用两个不同的 xcdatamodeld 文件?

4

1 回答 1

1

CoreData 轻量级迁移允许您在架构发生细微更改时轻松更新数据库。当您进行较大的更改时,您需要使用迁移映射过程。

Apple 在https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSMigrationManager_class/Reference/NSMigrationManager.html#//apple_ref/occ/cl/NSMigrationManager中记录了该过程

NSMigrationManager是关键。您可以创建一个处理您认为合适的自定义迁移的子类。主要关注的方法是:

migrateStoreFromURL:type:options:withMappingModel:toDestinationURL:destinationType:destinationOptions:error:

它允许您指定源数据库(您的版本 1)和目标数据库(版本 2)。

此引用NSMappingModel允许您定义两个数据库中的数据如何相互关联。Xcode 为这个过程提供了一个方便的图形界面。只需从新文件对话框中创建一个新的映射模型。

迁移完成后,您可以安全地删除旧的 CoreData 存储。

然后,当您创建新的持久存储协调器时,您可以检查原始存储是否存在,如果存在则执行迁移。

于 2013-02-18T13:37:32.630 回答