iOS – 创build数据库模式(只运行一次)
我正在使用FMDB为我的iPhone应用程序数据库,我想创build数据库和表架构只有一次。
如何在用户安装或更新应用程序时运行OBJC代码?
种类问候
您可以在NSUserDefaults
设置一个布尔值 – NSUserDefaults
只在用户删除应用程序时才会重置,因此如果在用户默认值中找不到特定的布尔值,则会执行一些代码(然后在执行后保存该值以阻止该值从再次运行)。
这将覆盖你的普通的“运行代码一旦安装”的情况下 – 你可以达到相同的更新类似的方法相同,但利用CFBundleVersion
variables(这将是不同的每个版本的应用程序)。
首先,在升级过程中你可能不想考虑执行某些东西,因为这是不可能的。 像@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运行这样的机制没有问题。