我的数据库出了问题 - 不知何故,似乎数据库在打开之前就已经关闭了。
如果没有打开数据库,我使用以下语句: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);
提前谢谢。
答案 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。