从 UIManagedDocument 到普通堆栈的核心数据迁移

Posted

技术标签:

【中文标题】从 UIManagedDocument 到普通堆栈的核心数据迁移【英文标题】:Core Data migration from UIManagedDocument to normal stack 【发布时间】:2013-10-10 22:10:35 【问题描述】:

我刚刚开始开发一个使用 UIManagedDocument 进行持久性的应用程序。据我所知,使用 UIManagedDocument 的唯一原因是利用它自动设置核心数据堆栈。

现在,我需要更改数据模型以实现一些新功能。数据模型的变化将是巨大的,我正在考虑从 UIManagedDocument 切换到普通的核心数据堆栈。我已经阅读了很多关于核心数据迁移和 UIManagedDocument 的内容,但是要从 UIManagedDocument 转到普通的 CoreData 堆栈,看起来我必须编写一个可以迁移数据的类?我只是想知道最好/最安全的方法是什么。

【问题讨论】:

【参考方案1】:

您需要进行哪些迁移仅取决于数据模型的更改方式。就数据迁移而言,从UIManagedDocument 创建的堆栈移动到您创建的堆栈应该没有任何意义。如果有多个文档,您必须弄清楚您想如何处理它,但如果 UIManagedDocument 仅用于避免编写样板堆栈设置代码,那不是问题。

由于您将模型更改描述为“剧烈”,因此您必须考虑配置迁移。您可能只需要一个自定义映射模型,或者您可能需要使用完整的自定义迁移代码。这实际上取决于模型如何变化的细节。

【讨论】:

但迁移仅有助于迁移到新模型。我仍然需要将数据从 UIManagedDocument 的堆栈中移出并移到我自己的堆栈中,这无论如何都需要我自己的自定义代码。那是对的吗?这就是为什么我想知道使用提供的迁移工具是否有任何好处。 只要您知道它的 URL 是什么,您应该能够直接访问 UIManagedDocuments 数据库。通常它在 UIManagedDocument 包的子文件夹中,但如果它使用 iCloud 会更复杂一些。目前尚不清楚您为什么不想使用 UIManagedDocument,它不会使您的数据库迁移变得更加困难(或更容易)。要将数据库文件迁移到另一个位置,只需使用 NSPersistentStoreCoordinators migrationPersistentStore... 顺便说一句,上述内容只会帮助您制作现有数据存储的副本。要将模型转换为新模型,您可能必须创建一个新存储,然后运行您的自定义代码以从旧存储读取数据并将其复制到新存储。

以上是关于从 UIManagedDocument 到普通堆栈的核心数据迁移的主要内容,如果未能解决你的问题,请参考以下文章

如何将现有的非文档核心数据存储转换为 uimanageddocument?

UIManagedDocument 不保存到磁盘

可以使用 NSFileManager 处理从 UIManagedDocument 创建的核心数据数据库吗?

UIManagedDocument - 验证核心数据实体

获取 UIManagedDocument 的 URL

保存 UIManagedDocument 时应用程序崩溃