2013-10-10 40 views
1

我刚刚开始研究使用UIManagedDocument进行持久化的应用程序。据我所知,使用UIManagedDocument的唯一原因是利用它自动设置核心数据堆栈。核心数据从UIManagedDocument迁移到正常堆栈

现在,我需要更改数据模型以实现一些新功能。对数据模型的更改将变得非常激烈,我正在考虑从UIManagedDocument转换到正常的核心数据堆栈。我一直在阅读很多关于核心数据迁移和UIManagedDocument的内容,但是从UIManagedDocument转到一个普通的CoreData堆栈,看起来我需要编写一个迁移数据的类。我只是想知道最好/最安全的方法是什么。

回答

0

您需要什么样的迁移取决于数据模型的变化。就数据迁移而言,从由UIManagedDocument创建的堆栈移动到您创建的堆栈应该没有意义。如果有多个文档,则必须弄清楚如何处理该文档,但如果仅使用UIManagedDocument来避免编写样板文件堆栈设置代码,那不是问题。

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

+0

但是迁移只能帮助迁移到新模型。我仍然需要将数据从UIManagedDocument的堆栈中移出并存入我自己的数据库中,无论如何,这需要我自己的自定义代码。那是对的吗?这就是为什么我想知道使用提供的迁移工具是否有任何好处。 – Shinigami

+0

只要您知道其URL是什么,就应该能够直接访问UIManagedDocuments数据库。通常它位于UIManagedDocument包的子文件夹中,但如果它使用iCloud,它会更复杂一点。它不清楚为什么你不想使用UIManagedDocument,它不会让你的数据库迁移变得更困难(或更容易)。要将数据库文件迁移到其他位置,只需使用NSPersistentStoreCoordinators migrationPersistentStore ... –

+0

顺便说一句,以上只会帮助您制作现有数据存储的副本。要将模型转换为新模型,您可能需要创建一个新商店,然后运行自定义代码以从旧商店读取数据并将其复制到新商店中。 –