Как правильно узнать, был ли объект инициализирован в базе данных? - PullRequest
0 голосов
/ 06 апреля 2009

У меня проблема с базой данных - почему-то в какой-то момент кажется, что база данных закрывается еще до ее открытия.

Если база данных не была открыта, я использую следующий оператор: if (! Database) затем break;

когда * база данных установлена ​​в ноль (база данных = ноль), когда она не была открыта.

Я делаю это правильно? Или в моем коде есть какая-то другая ошибка?

Вот мой код:

-(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 ]

1 голос
/ 06 апреля 2009

Попробуйте установить указатель базы данных на 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 - нулевой указатель на объект. Но database является указателем на структуру, поэтому используйте NULL.

1 голос
/ 06 апреля 2009

Ваша близкая скобка слишком рано (но я не думаю, что это проблема, потому что она не скомпилируется.

В качестве заметки о стиле, пожалуйста, верните только ОДИН раз от функции (и сделайте это внизу). Создайте BOOL, инициализируйте его значением TRUE и при необходимости измените его значение на FALSE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...