Ios 核心数据迁移和传送数据库文件
目前,我已将一个应用程序发送到应用程序商店。我希望将填充的数据库包含到下一个版本中(我将把.sqlite文件复制到主捆绑包中),但根据位置的不同,需要加载一些数据。下一版本的数据模型有重大更改。此外,下一个版本还将对数据模型进行更改。我该怎么办Ios 核心数据迁移和传送数据库文件,ios,core-data,app-store,migration,shipping,Ios,Core Data,App Store,Migration,Shipping,目前,我已将一个应用程序发送到应用程序商店。我希望将填充的数据库包含到下一个版本中(我将把.sqlite文件复制到主捆绑包中),但根据位置的不同,需要加载一些数据。下一版本的数据模型有重大更改。此外,下一个版本还将对数据模型进行更改。我该怎么办 如果我发货DB,是否需要考虑迁移?如果我检查DB文件是否存在,如果不存在,则从主捆绑包中复制它-这不会影响当前用户,但如果我不检查-它将在用户每次启动应用程序时被替换。我还不清楚如何处理下一个版本。我假设我需要在不同版本之间保持附带的DB名称相同,但这会
如果我发货DB,是否需要考虑迁移?如果我检查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];
}
//...
double version=[self-getDatabaseMigrationVersion];
如果(版本<1.1)
{
//1.0->1.1 SQL迁移
版本=1.1;
[self-setDatabaseMigrationVersion:version];
}
如果(版本<1.2)
{
//1.1->1.2 SQL迁移
版本=1.2;
[self-setDatabaseMigrationVersion:version];
}
//...
重要的是要记住,应用程序更新并不是在用户之间均匀分布的,因此您绝对不能假设每个人都执行了所有相关的迁移。您无法维持一系列增量步骤。例如,即使在1.3、1.2和1.1之后处于1.4,也可能仍有用户处于1.0,以此类推,因此不能放弃任何中间步骤
显然,有一些库可以帮助管理iOS上的SQLite迁移。我没有链接到它们,因为我没有审阅它们。我怀疑它们不仅仅是我上面提到的过程的简单包装