iOS – 创build数据库模式(只运行一次)

我正在使用FMDB为我的iPhone应用程序数据库,我想创build数据库和表架构只有一次。

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

种类问候

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

这将覆盖你的普通的“运行代码一旦安装”的情况下 – 你可以达到相同的更新类似的方法相同,但利用CFBundleVersionvariables(这将是不同的每个版本的应用程序)。

首先,在升级过程中你可能不想考虑执行某些东西,因为这是不可能的。 像@lxtbuild议的那样,你可以在首选项中存储一个值来表示数据库版本,但是它可能不是防弹的。

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

在数据库层(或适配器)类中,创build一个“打开”方法来处理打开。 在这个方法中,你首先运行select database_ver from metadata; 检查数据库版本。 如果没有提取,则运行表创build脚本,并插入database_ver = 1行。

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

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

FMDB运行这样的机制没有问题。