iOS推出应用更新。 在需要更新数据库时保持用户数据不变

我刚刚做了一个快速的search,没有什么太相关的东西出现在这里。

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

最好的办法是什么? 我目前认为,在应用程序更新我永远不会replace用户(文档文件夹,而不是在捆绑)数据库文件,而是改变其结构使用SQL查询。

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

除非有特定的钩子,否则在更新之后首先运行的委托方法会在运行之前将这个逻辑的调用放到appDelegate的开头。

在做这个时,我会显示“更新应用程序”或其他东西给用户。

接下来的事情,如果沿线有错误,更新失败会发生什么。 数据库将过时,应用程序将无法正常工作,因为它期望更新的版本?

我是否应该自行删除用户的数据库文件,并将其replace为应用程序包中的新版本。 或者,我应该只是testing,testing,testing,直到在我身边的一切都稳定了,如果用户方面发生错误是另一回事,在这种情况下,我不能做任何事情只丢弃数据。

任何想法,将不胜感激。 🙂

谢谢!

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

然后下一个版本的应用程序应该运行一次这个代码(如你所描述的)来迁移所有用户的数据。

至于处理错误,这是一个艰难的。 我会非常厌倦丢弃用户的数据。 更好的办法是显示错误消息,也许让用户与错误报告联系。 然后,您可以发布更新到您的应用程序,希望可以做到没有问题的迁移。 但是,理想情况下,你testing的过程足够好,不应该有这样的问题。 当然,这一切都取决于移民过程的复杂性。