我想知道在处理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
但没有找到正确的方法来完成我想要的事情,
任何帮助将不胜感激
答案 0 :(得分:0)
我的建议是:在NSUserDefault中创建一对密钥/值以保存版本号。在启动应用程序时,它将完成以下工作:
步骤1:验证是否需要进行数据库迁移。如果是,请执行数据库迁移过程并等到结束。您可以在stackoverflow中找到许多数据库迁移解决方案。 步骤2:数据库迁移完成后(或者没有迁移要做):在NSUserDefault&amp;中获取应用程序版本号(我们称之为_oldAppVersion)。在您的应用程序中定义(例如,在集成的version.h文件中),名为_newAppVersion。取决于_oldAppVersion&amp;的值。 _newAppVersion,您可以决定执行一些代码。 步骤3:如有必要,使用_newAppVersion在NSUserDefaults中更新应用程序版本。
你可以交换step1&amp; step2有自己的实现。在显示应用程序的第一个屏幕之前,所有这3个步骤都将在启动画面或等待屏幕下完成。
这里的诀窍是在NSUserDefaults中的某处复制你的应用程序版本。
希望回答你的问题。