ios - 更新商店中的应用程序时的 SQLite 数据库

标签 ios sqlite app-store updates

我在我的 iOS 应用程序中使用 sqlite,我的数据库文件名为 data.db。 假设我只有一张 table ,我将应用程序推送到 AppStore。 在下一个版本中,我更新了 data.db 并添加了另一个表并将应用程序推送到 AppStore。 所以问题是,拥有旧版本并更新应用程序的用户,他会拥有带有 2 个表的新 data.db 吗?还是他保留旧的data.db? 如果他保留旧的,如何以编程方式更新他的 data.db?如果他会得到新的,那么如果我将他的个人数据存储在 data.db 中可能不是一个好主意。

最佳答案

当您分发带有数据库的应用程序时,该数据库存储在包中。如果用户需要更新数据库,应用程序无法以编程方式更新包中的文件,因此您通常将数据库从包中复制到 Documents 文件夹(如果您还没有这样做),然后应用程序可以更新该文档版本包含来自用户的新信息。

当您分发应用更新时, bundle 中的文件会被替换/更新,但用户在 Documents 文件夹中的副本会保留在那里,除非您以编程方式明确删除它(或用户手动卸载应用)。因此,使用您的示例, bundle 中的数据库将包含两个表(但没有用户数据),而 Documents 文件夹中的副本将只有一个表(但包含用户数据)。

如果您想要一个包含两个表的数据库,但也需要用户数据,您必须将新的两个表数据库复制到 Documents 文件夹,然后使用旧文档中的用户数据更新此版本数据库。或者,您可以包含一个脚本来更改用户的数据库,因此它现在包含两个表(例如,执行必要的 ALTER TABLE 和 CREATE TABLE)。

顺便说一句,跟踪数据库的版本很有用,方法是包含一个包含此信息的“配置”表,或者使用 user_version schema_version 编译指示。这样您就可以以编程方式检查数据库并确定您可能需要采取的行动方案。

关于ios - 更新商店中的应用程序时的 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27390557/

相关文章:

ios - 不能通过委托(delegate)从另一个类执行方法?

iphone - 在 iPhone 上使用 SQLite3 获取午夜(今天早上)作为 UNIX 时间戳

ios - 我需要安装 Xcode 4.5 才能将 iOS 应用程序提交到 App store 吗?

iphone - 更新推送通知的实时应用程序 ID

iphone - 使iPhone能够获取和解析JSON?

ios - 使用约束将 UIView 添加到 TableViewCell 中的 ContentView

sqlite - 如何使用 SQLite 将时间转换为秒

php - SQLite3 无法写入 Amazon AWS 上的数据库文件,但仅在某些情况下

objective-c - 使用 Xcode 学习 objective-c?

ios - (MapView) Userlocation image changed 帮助恢复