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

时间:2014-08-04 14:44:37

标签: ios objective-c core-data core-data-migration

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

我试着解释一下我的意思,假设我的应用程序有3个版本:
ver 1.0.0(核心数据模型版本为1.0)
ver 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 Migration
Core Data : Post migration, additional migration code

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

1 个答案:

答案 0 :(得分:0)

我的建议是:在NSUserDefault中创建一对密钥/值以保存版本号。在启动应用程序时,它将完成以下工作:

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

你可以交换step1&amp; step2有自己的实现。在显示应用程序的第一个屏幕之前,所有这3个步骤都将在启动画面或等待屏幕下完成。

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

希望回答你的问题。