目前,我有一个应用程序发送到应用程序商店。我希望将填充的数据库包含到下一个版本中(我将把.sqlite文件复制到主包中),但根据位置的不同,需要加载一些数据。下一个版本的数据模型有很大的变化。此外,下一个版本还将对数据模型进行更改。我做什么好?
如果我发布了数据库,我需要注意迁移吗?如果我检查DB文件是否存在,如果不存在,则从主包中复制它-它不会影响当前用户,但如果我不检查-它将在用户每次启动应用程序时被替换。我仍然不清楚如何处理下一个版本。我假设我需要在不同版本之间保持附带的DB名称相同,但这会导致更新时的数据丢失。
发布于 2015-04-14 08:24:33
这是一个极具挑战性的问题。我们在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迁移。我没有链接到它们,因为我还没有审阅它们。我怀疑它们不只是我上面提到的过程的简单包装器。
https://stackoverflow.com/questions/29597285
复制相似问题