我刚刚进行了快速搜索,没有找到任何相关信息,所以就开始吧。
我已经发布了应用程序的第一个版本。从那时起,我对 SQLite 数据库做了一些更改,在下一个版本中,我将需要更新数据库结构但保留用户数据。
最好的方法是什么?我目前认为,在应用程序更新时,我永远不会替换用户的(文档文件夹,不在 bundle 中)数据库文件,而是使用 SQL 查询更改其结构。
这将涉及跟踪自上一个版本以来对数据库所做的更改。将所有这些更改编写成 SQL 查询的脚本并运行这些以将数据库更新到最新版本。我还需要在数据库中保留一个字段来跟踪版本号(为简单起见,与应用程序版本保持一致)。
除非有特定的 Hook ,在更新后首次运行时触发的委托(delegate)方法,我将在运行任何其他内容之前将对此逻辑的调用放入 appDelegate 的最开始。
在执行此操作时,我将向用户显示“正在更新应用程序”或其他内容。
接下来,如果在线某处出现错误并且更新失败会发生什么。数据库将过时并且应用程序将无法正常运行,因为它需要更新版本?
我是否应该自己删除用户的数据库文件并将其替换为应用程序包中的新版本。或者,我应该只是测试、测试、测试,直到我这边的一切都可靠为止,如果用户这边出现错误,那是另外一回事,在这种情况下,我对此无能为力,只能丢弃数据。
如有任何想法,我们将不胜感激。 :)
谢谢!
最佳答案
首先,您考虑的方法是正确的。这称为数据库迁移。每当您修改数据库时,您应该将适当的 ALTER TABLE...
等方法收集到迁移脚本中。
然后您的应用的下一个版本应该运行一次此代码(如您所述)以迁移所有用户的数据。
至于处理错误,那是一个棘手的问题。我会非常厌倦丢弃用户的数据。更好的做法是显示一条错误消息,或许让用户通过错误报告与您联系。然后您可以发布您的应用程序的更新,希望它可以毫无问题地进行迁移。但理想情况下,您对流程的测试足够好,应该不会出现任何此类问题。当然,这完全取决于迁移过程的复杂程度。
关于objective-c - iOS 推出应用程序更新。在需要更新数据库时保持用户数据完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7347455/