iOS - 创建数据库架构(仅运行一次代码)

时间:2012-03-24 11:05:16

标签: iphone objective-c ios database

我正在使用FMDB作为我的iPhone App数据库,我只想创建数据库和表架构一次。

如何在用户安装或更新应用程序时运行OBJC代码?

Kinds Regards

2 个答案:

答案 0 :(得分:3)

您可以在NSUserDefaults中设置布尔值 - NSUserDefaults仅在用户删除应用时重置,因此如果在用户默认值中找不到特定的布尔值,则会执行一些代码(然后在执行后保存该值以防止再次运行)。

这将涵盖您的普通“运行代码一次安装”方案 - 您可以使用类似的方法实现相同的更新,但使用CFBundleVersion变量(对于您的应用的每个版本,这将是不同的)

答案 1 :(得分:1)

首先,您可能不想考虑在升级期间执行某些操作,因为这是不可能的。与@lxt建议一样,您可以在首选项中存储一个值以指示数据库版本,但它可能不是防弹的。

解决此问题的常用方法是使用自建的元数据。首次创建数据库时,应创建一个名为"metadata""properties"的额外表,其中包含两个varchar列"name""value"。您插入一行("database_ver", "1")

在数据库层(或适配器)类中,创建一个“open”方法来处理打开。在此方法中,首先运行select database_ver from metadata;以检查数据库版本。如果未提取任何内容,则运行表创建脚本,并插入database_ver = 1行。

稍后,如果您升级了表格格式,请为每个版本提供alter table语句,然后根据database_ver运行它们。对于升级后的安装,您可以使用更新的create table语句,然后直接将"database_ver"设置为"2"(或更高版本),而无需通过alter table

与在首选项中存储值相比,将数据存储在数据库本身更为常见。因为即使用户在某处备份了文件,或者跳过了某个版本,您仍然可以通过其元数据表来告诉数据库的格式。

FMDB运行这种机制没有问题。