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

时间:2009-04-05 21:04:46

标签: objective-c sqlite

我的数据库出了问题 - 不知何故,似乎数据库在打开之前就已经关闭了。

如果没有打开数据库,我使用以下语句:if(!database)then break;

当* database未被打开时被设置为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_close(database);

提前谢谢。

2 个答案:

答案 0 :(得分:1)

你的近距离支撑太早(但我不认为这是问题,因为它不会编译。

作为样式注释,请仅从函数返回一次(并在底部进行)。创建一个BOOL,将其初始化为TRUE,并在必要时将其值更改为FALSE。

答案 1 :(得分:1)

尝试将数据库指针设置为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;
}

在Objective C中,nil是一个对象上的nil指针。但是database是指向结构的指针,所以请改用NULL。