Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone iOS-创建数据库架构(仅运行一次代码)_Iphone_Objective C_Ios_Database - Fatal编程技术网

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

Iphone iOS-创建数据库架构(仅运行一次代码),iphone,objective-c,ios,database,Iphone,Objective C,Ios,Database,我正在为我的iPhone应用程序数据库使用,我只想创建一次数据库和表模式 当用户安装或更新应用程序时,如何运行OBJC代码 您可以在NSUserDefaults中设置一个布尔值-NSUserDefaults仅在用户删除应用程序时重置,因此,如果在用户默认值中找不到特定的布尔值,您可以执行一些代码(然后在执行后保存该值,以防止再次运行该值) 这将涵盖您的普通“安装后立即运行代码”场景-您可以通过类似的方法实现相同的更新,但使用CbundLeverVersion变量(对于您的应用程序的每个版本,这将

我正在为我的iPhone应用程序数据库使用,我只想创建一次数据库和表模式

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


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


这将涵盖您的普通“安装后立即运行代码”场景-您可以通过类似的方法实现相同的更新,但使用
CbundLeverVersion
变量(对于您的应用程序的每个版本,这将是不同的).

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


这将涵盖您的普通“安装后立即运行代码”场景-您可以通过类似的方法实现相同的更新,但使用
CbundLeverVersion
变量(这对于您的应用程序的每个版本都不同)。

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

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

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

稍后,如果您升级了表格格式,请为每个版本提供
altertable
语句,并基于
database\u ver
运行它们。对于升级后的安装,您可以使用更新的
create table
语句,然后直接将
“database\u ver”
设置为
“2”
(或更高版本),而无需执行
alter table

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


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

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

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

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

稍后,如果您升级了表格格式,请为每个版本提供
altertable
语句,并基于
database\u ver
运行它们。对于升级后的安装,您可以使用更新的
create table
语句,然后直接将
“database\u ver”
设置为
“2”
(或更高版本),而无需执行
alter table

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

FMDB运行这种机制没有问题