【发布时间】:2009-06-28 23:12:34
【问题描述】:
我有一个使用 sqlite 的应用程序。在第一次启动时,我将 .db 文件复制到 NSDocumentDirectory 中(以便我可以对其进行更新)。在以后的版本中,我计划向这个数据库添加新数据。我如何确保每次应用程序更新(但不是每次应用程序启动)都会将此数据库的最新副本复制到 NSDocumentDirectory?
谢谢
-康斯坦丁
【问题讨论】:
标签: iphone cocoa cocoa-touch sqlite
我有一个使用 sqlite 的应用程序。在第一次启动时,我将 .db 文件复制到 NSDocumentDirectory 中(以便我可以对其进行更新)。在以后的版本中,我计划向这个数据库添加新数据。我如何确保每次应用程序更新(但不是每次应用程序启动)都会将此数据库的最新副本复制到 NSDocumentDirectory?
谢谢
-康斯坦丁
【问题讨论】:
标签: iphone cocoa cocoa-touch sqlite
我有一个常量,我会随着新版本的增加而增加,比如 kDatabaseVersion。
在启动时,我会检查以下内容:
数据库是否存在于 Documents 目录中?如果没有,请复制它。这可能意味着第一次发布已经发生。
如果数据库确实存在,请根据具有相同键的 NSUserDefaults 条目检查常量中的版本。如果常数更大,则复制数据库。如果没有,不要。相应地更新 NSUserDefaults。
当然,如果数据库还包含来自您的用户的数据,您必须弄清楚如何将其迁移到新的数据存储。如果您使用的是 Core Data,您甚至可以考虑使用多个持久性存储来分隔用户数据和默认数据。
【讨论】:
在您的应用程序中保留数据库版本号。 当应用程序启动时,检查数据库是否存在于文档目录中。如果没有,请将其复制到文档中。目录。 如果数据库已经存在,请将应用程序中的数据库版本号与存储在数据库表中的版本号进行比较。如果数字相等,一切都很好,否则您必须“升级”现有数据库(修改数据库架构或其他)。因此,您可以使用应用程序的每个版本升级数据库。编写一个包含所有必要逻辑的简单函数“CheckForDatabaseUpdate”。并以版本号作为参数创建一个“UpgradeToDatabaseVersion”函数。此函数将处理数据库模式从一个版本升级到另一个版本。
【讨论】: