Objective c 知道对象是否已在数据库中初始化的正确方法是什么?
我的数据库有一个问题——不知何故,在某个时刻,数据库似乎在打开之前就已经关闭了 如果数据库未打开,我将使用以下语句:If(!database)then break 当*数据库未打开时被设置为nil(database=nil) 我这样做对吗?或者我的代码中有其他错误 这是我的密码:Objective c 知道对象是否已在数据库中初始化的正确方法是什么?,objective-c,sqlite,Objective C,Sqlite,我的数据库有一个问题——不知何故,在某个时刻,数据库似乎在打开之前就已经关闭了 如果数据库未打开,我将使用以下语句:If(!database)then break 当*数据库未打开时被设置为nil(database=nil) 我这样做对吗?或者我的代码中有其他错误 这是我的密码: -(BOOL) loadDB: (NSString*) dbPath { //Database was opened before if (database) { sqlite3_close(database
-(BOOL) loadDB: (NSString*) dbPath {
//Database was opened before
if (database) {
sqlite3_close(database);
database = nil;
}
//Opening database
if (sqlite3_open([dbPath UTF8String], &database) != SQLITE_OK)
{
database = nil;
return FALSE;
}
return TRUE;
}
代码被多次调用,有时会抛出异常。为什么会发生这种情况
当我使用调试器查看问题发生的位置时,它显示:sqlite3\u close(数据库)
提前感谢您。您的右大括号太早了(但我认为这不是问题所在,因为它无法编译)
作为样式说明,请仅从函数返回一次(并在底部设置)。创建一个BOOL,将其初始化为TRUE,必要时将其值更改为FALSE。尝试将数据库指针设置为NULL而不是nil
-(BOOL) loadDB: (NSString*) dbPath {
BOOL retVal = TRUE
//Database was opened before
if (database) {
sqlite3_close(database);
database = NULL; // <-- NULL not nil
}
//Opening database
if (sqlite3_open([dbPath UTF8String], &database) != SQLITE_OK) {
database = NULL; // <-- NULL not nil
retVal = FALSE;
}
return retVal;
}
-(BOOL)loadDB:(NSString*)dbPath{
BOOL retVal=TRUE
//数据库是以前打开的
if(数据库){
sqlite3_关闭(数据库);
database=NULL;//多次返回在某些情况下很有用,所以我个人不认为这是一个规则。多次返回意味着您的函数太大-查找多次返回不仅仅是一种气味,它是一种维护臭味。我根据您的建议重新设计了代码,但这没有帮助。当我使用调试器查看如果出现问题,它会显示:sqlite3\u关闭(数据库);@kevindtimm在本例中,多次返回很糟糕,我下面的回答显示了一种不同的方法。但是,在作为保护条件的代码中,两次返回是常见的。例如,在这个对象的第一次实例化时,数据库是否设置为nil?因为我们只有一个代码片段,很难判断数据库可以接触到多少其他地方d、 可惜他不想知道答案(或者已经解决了,但没有公布决议)。他在副本上接受了我的答案