iOS推出应用更新。需要DB更新时保持用户数据完好无损

时间:2011-09-08 11:40:27

标签: objective-c ios sqlite

我刚刚做了一个快速搜索,没有太多相关内容,所以这里就是这样。

我发布了应用的第一个版本。从那时起,我对SQLite数据库进行了一些更改,在下一个版本中,我将需要更新数据库结构,但保留用户的数据。

最好的方法是什么?我目前正在考虑在应用程序更新时,我永远不会替换用户的(文档文件夹,而不是捆绑)数据库文件,而是使用SQL查询更改其结构。

这将涉及跟踪自上一版本以来对数据库所做的更改。将所有这些更改编写到SQL查询中并运行这些更改以使DB进入最新版本。我还需要在数据库中保留一个字段来跟踪版本号(为简单起见,请与app版本保持一致)。

除非有特定的钩子,否则委托在更新后首次运行时触发的方法,我将把这个逻辑的调用放到appDelegate的最开头,然后运行其他任何东西。

执行此操作时,我会向用户显示“正在更新应用”或其他内容。

接下来,如果沿线某处出现错误并且更新失败,会发生什么。数据库将过时,应用程序将无法正常运行,因为它需要更新的版本?

我应该自己删除用户的数据库文件并将其替换为应用程序包中的新版本。或者,我应该只测试,测试,测试,直到一切都在我身边,如果用户身上发生了错误,那就是别的东西,在这种情况下,我无法做任何事情只会丢弃数据。

对此有任何想法将不胜感激。 :)

谢谢!

1 个答案:

答案 0 :(得分:5)

首先,您正在考虑的方法是正确的。这称为数据库迁移。无论何时修改数据库,都应该将相应的ALTER TABLE...等方法收集到迁移脚本中。

然后,您应用的下一个版本应运行此代码一次(如您所述)以迁移所有用户的数据。

至于处理错误,这是一个艰难的问题。我会非常厌倦丢弃用户的数据。更好的方法是显示错误消息,并让用户通过错误报告与您联系。然后,您可以发布应用程序的更新,希望可以毫无问题地进行迁移。但理想情况下,您应该对此过程进行充分测试,以免出现此类问题。当然,这一切都取决于迁移过程的复杂性。