Objective c 知道对象是否已在数据库中初始化的正确方法是什么?

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

我的数据库有一个问题——不知何故,在某个时刻,数据库似乎在打开之前就已经关闭了

如果数据库未打开,我将使用以下语句:If(!database)then break

当*数据库未打开时被设置为nil(database=nil)

我这样做对吗?或者我的代码中有其他错误

这是我的密码:

-(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、 可惜他不想知道答案(或者已经解决了,但没有公布决议)。他在副本上接受了我的答案