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



目前我有一个应用程序已发送到app Store。我想将填充的数据库包含到下一个版本中(我将把.sqlite文件复制到主捆绑包中),但根据位置的不同,需要加载一些数据。下一个版本的数据模型发生了重大变化。此外,下一个版本还将对数据模型进行更改。我该怎么办?

如果我运送DB,我需要处理迁移吗?如果我检查DB文件是否存在,如果不存在,则从主捆绑包中复制它——它不会影响当前用户,但如果我不检查——每次用户启动应用程序时,它都会被替换。我还不清楚如何处理下一个版本。我想我需要让附带的数据库在不同版本之间保持相同的名称,但这会导致更新时的数据丢失。

这是一个典型的具有挑战性的问题。我们在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迁移。我没有链接到它们,因为我还没有审阅过它们。我怀疑它们远不止是我上面提到的过程的简单包装。

相关内容

  • 没有找到相关文章

最新更新