轻量级迁移后核心数据执行动作

Posted

技术标签:

【中文标题】轻量级迁移后核心数据执行动作【英文标题】:Core-data perform action after lightweight migration 【发布时间】:2015-06-24 11:26:45 【问题描述】:

我的应用在更新核心数据模型时会执行一些轻量级迁移。

但是,我想在迁移发生后作为一次性操作执行一些特定操作。

例如,我有两个 NSManagedObjects...DocumentDocumentLayout。目前,DocumentDocumentLayout 之间没有任何关系,除非应用程序在寻找“documentName' 匹配相应对象中的 'layoutName'。

这是低效的,所以我想在两者之间创建一个真正的核心数据关系,然后在迁移发生后,通过迭代和创建关系来链接两个对象。

我看过诸如...之类的代码

NSManagedObjectModel *destinationModel = [persistentStoreCoordinator managedObjectModel];
BOOL pscCompatibile = [destinationModel isConfiguration:nil compatibleWithStoreMetadata:sourceMetadata];

... 检查是否需要迁移并进行相应的工作,但我需要这是一次性操作,因为在应用程序的生命周期内,可能会有文档存储在 Document 不需要与 DocumentLayout 建立关系,因此如果每次对数据模型进行更新时都运行此操作,则关系将被创建的不是必需的。

所以,我可以在应用程序中查看(比如说)一个 versionNumber 标志,它检测到这一点并且只运行一次操作并阻止它每次运行,但这似乎不优雅且容易出错。

那么,有没有办法在特定迁移后运行一次操作,然后不再运行?

【问题讨论】:

【参考方案1】:

这是一个非常好的问题,我花了很多时间试图弄清楚。到目前为止我找到的最佳答案可以在 article from ObjC.io 中找到(我与他们没有任何关系)。

很抱歉只是发布链接,但我认为答案比几行代码复杂得多。

【讨论】:

感谢您的链接。除了在代码中监视版本之外,似乎没有“简单”的方法可以做到这一点。遗憾的是,核心数据无法获知发生了特定的自动迁移……即从版本 n 到版本 n+1,即使已经发生或正在发生多次迁移。

以上是关于轻量级迁移后核心数据执行动作的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 轻量级迁移后执行自定义代码

核心数据轻量级迁移 - 何时版本?

核心数据模型迁移

OS X 上的 Core Data 轻量迁移

只是在第一个应用程序发布之前对核心数据轻量级迁移的一个小说明

核心数据迁移:文件存在