核心数据迁移和传送数据库文件

时间:2015-04-13 03:06:47

标签: ios core-data app-store migration shipping

目前我有一个应用程序已发送到App Store。我想将填充的数据库包含到下一个版本(我将.sqlite文件复制到主包),但是需要加载一些数据,具体取决于位置。下一版本的数据模型有重大变化。此外,下一版本也会对数据模型进行更改。我该怎么办?

如果我运送数据库,是否需要关注迁移?如果我检查数据库文件是否存在,如果不存在,则从主数据包中复制它 - 它不会影响当前用户,但如果我不能检查 - 它会被替换掉时间用户启动应用程序。我还不清楚如何处理下一个版本。我假设我需要将发布的数据库从版本到版本保持相同,但它会导致更新时数据丢失。

1 个答案:

答案 0 :(得分:0)

这是一个经典的挑战性问题。我们在iOS上做的是将数据库的迁移版本号存储在某个地方,可能是在NSUserDefaults中,然后逐步执行一系列if语句,检查部署的版本号是否小于所需的版本号版本号。如果触发了if语句,则会发生与该版本升级相对应的迁移,然后版本号本身会递增。

  double version = [self getDatabaseMigrationVersion];

  if(version < 1.1)
  {
    //1.0 -> 1.1 SQL migration
    version = 1.1;
    [self setDatabaseMigrationVersion:version];  
  }

  if(version < 1.2)
  {
    //1.1 -> 1.2 SQL migration
    version = 1.2;
    [self setDatabaseMigrationVersion:version];  
  }

  //...

重要的是要记住,应用更新并非在用户之间均匀分布,因此您绝对不能假设每个人都执行了所有相关的迁移。您无法保持一系列增量步骤。例如,即使您在1.3,1.2和1.1之后处于1.4,您仍然可能拥有1.0的用户,依此类推,因此您不能放弃任何中间步骤。

显然有一些库可以帮助管理iOS上的SQLite迁移。我没有链接到它们,因为我还没有对它们进行评论。我怀疑它们不仅仅是围绕我上面提到的过程的简单包装。