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

Posted

技术标签:

【中文标题】Core Data 轻量级迁移后执行自定义代码【英文标题】:Executing custom code after Core Data lightweight migration 【发布时间】:2014-08-04 14:44:37 【问题描述】:

我想知道在处理Core Data lightweight migration 之后执行自定义代码时的最佳做法。

我将尝试解释我的意思,假设我有 3 个版本的应用: 版本 1.0.0(核心数据模型版本为 1.0) 版本 1.1.0(核心数据模型版本为 1.0) ver 2.0.0(核心数据模型版本为2.0)

如您所见,核心数据模型在 1.0.0 和 1.1.0 之间没有变化,但在 1.1.0 和 2.0.0 之间确实发生了变化。

现在,除了模型更改之外,我还需要运行一些自定义代码来更新一些现有实体。 如果用户刚刚安装了具有不同型号版本的较新版本,则需要执行此自定义代码,例如: 如果用户拥有 1.0.0 版本并且他现在正在安装 2.0.0 版本 - 应该执行代码 如果用户拥有 1.1.0 版并且他现在正在安装 2.0.0 版 - 应该执行代码

但另一方面,如果用户安装了具有相同型号版本的新版本,或者如果用户之前没有该应用程序,则我不想运行此代码,因此没有旧数据要更新。 例如: 如果用户拥有 1.0.0 版并且他现在正在安装 1.1.0 版 - 不应执行代码 如果用户没有应用程序并且他现在正在安装版本 2.0.0 - 不应执行代码

我搜索这个问题,发现一些问题在谈论它:Detecting a Lightweight Core Data MigrationCore Data : Post migration, additional migration code

但没有找到正确的方法来做我想做的事, 任何帮助将不胜感激

【问题讨论】:

【参考方案1】:

我的建议是:在 NSUserDefault 中创建一对键/值来保存版本号。在您的应用程序启动时,它将执行以下工作:

Step1:验证是否需要迁移数据库。如果是,请执行您的数据库迁移过程并等到最后。您可以在 *** 中找到许多数据库迁移的解决方案。 Step2:数据库迁移完成后(或者没有迁移要做):在NSUserDefault中获取应用程序版本号(我们称之为_oldAppVersion)并在您的应用程序中定义(例如在集成的version.h文件中)称为_newAppVersion。根据 _oldAppVersion & _newAppVersion 的值,您可以决定执行一些代码。 第 3 步:如有必要,使用 _newAppVersion 更新 NSUserDefaults 中的应用版本。

您可以交换第 1 步和第 2 步来拥有自己的实现。在显示应用程序的第一个屏幕之前,所有这 3 个步骤都将在启动屏幕或等待屏幕下完成。

这里的诀窍是在 NSUserDefaults 中的某处复制应用程序的版本。

希望能回答您的问题。

【讨论】:

以上是关于Core Data 轻量级迁移后执行自定义代码的主要内容,如果未能解决你的问题,请参考以下文章

iOS Core Data - 用于将关系从非可选更改为可选的轻量级迁移

iOS Core Data 不执行轻量级迁移

OS X 上的 Core Data 轻量迁移

Core Data轻量级迁移错误

Core Data(iPhone)实现“自动轻量级迁移”

Core Data轻量级迁移有多少个迁移步骤?