Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Ошибка: не удалось открыть базу данных с сообщением« не ошибка ».» - PullRequest
1 голос
/ 16 января 2009

Я делаю приложение со многими операциями с базой данных. Поскольку SQLite кэширует данные, в моем методе applicationDidReceiveMemoryWarning я закрываю базу данных и открываю ее снова, чтобы удалить кэшированные данные.

Когда это сделать, я получаю эту ошибку

*** Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Ошибка: не удалось открыть базу данных с сообщением« не ошибка ». *

Вот код, который я использую, чтобы закрыть базу данных и открыть снова, где база данных имеет тип sqlite3 * [MySQLInter finalizeStatements];

 if(sqlite3_close(database) == SQLITE_OK){

//open again
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *path = [documentsDirectory stringByAppendingPathComponent:@"mydb.sql"];


    if(sqlite3_open([path UTF8String], &database) != SQLITE_OK){

         NSAssert1(0, @"Error: failed to open database with message '%s'.", sqlite3_errmsg(database));

}

 }

 else{

NSAssert1(0, @"Error: failed to close database on memwarning with message '%s'.", sqlite3_errmsg(database));

 }

Как этого избежать?

Ответы [ 2 ]

1 голос
/ 17 января 2009

sqlite3_open возвращает код ошибки. Вы просто проверяете его на SQLITE_OK - было бы интересно узнать, что именно он возвращает. Если он не открывается, он не может вызвать sqlite3_errmsg для базы данных, потому что он не открыл базу данных, так что объект может быть заполнен неправильно.

В вашей ошибке при отлове условия выведите значение возврата sqlite3_open, и мы сможем помочь вам лучше.

1 голос
/ 16 января 2009

Вы уверены, что не имеете в виду "! = SQLITE_OK" при вызове sqlite3_open?

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