Сбой загрузки базы данных Sqlite - проблема с оператором подготовки SQLite - iPhone - xCode 4.3.1 - PullRequest
0 голосов
/ 27 марта 2012

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

- (NSArray *)getDatabase {

NSLog(@"Get Database Called");

    NSMutableArray *retval = [[[NSMutableArray alloc] init] autorelease];
    NSString *query = @"SELECT Description, UniqueID, HexCoords, NoHexCoords, NoAnnots, AnnotText, DescriptionFormatting, HexCoordsPortrait FROM MainTable";
    sqlite3_stmt *statement;
    if (sqlite3_prepare_v2(_database, [query UTF8String], -1, &statement, nil) 
        == SQLITE_OK) {
        while (sqlite3_step(statement) == SQLITE_ROW) {

            char *nameChars = (char *) sqlite3_column_text(statement, 0);
            char *desChars = (char *) sqlite3_column_text(statement, 1);
            int uniqueID = sqlite3_column_int(statement, 2);

Из использования точек останова я вижу, что проблема в операторе if и что код никогда не преодолеет этот оператор if.Может кто-нибудь определить, что может быть не так?Код работал несколько месяцев назад, и я недавно обновился до xCode 4.3, так может ли это быть проблемой?

Заранее спасибо.

1 Ответ

1 голос
/ 27 марта 2012

Да, я согласен с Иоахимом.иногда возникает проблема с подключением БД.что я делаю, это пара вещей.Сначала я добавляю следующий код в мой делегат приложения приложения.

- (void) copyDatabaseIfNeeded {

    //Using NSFileManager we can perform many file system operations.
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSString *dbPath = [self getDBPath];
    BOOL success = [fileManager fileExistsAtPath:dbPath]; 

    if(success) {

        NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"MyDB.sqlite"];
        success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];

        if (!success) 
            NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
    }   
}

Вызовите эту функцию в ApplicationDidFinishLaunching.

Теперь удалите базу данных, которая сейчас находится в вашем комплекте.(УБЕДИТЕСЬ, ЧТО У ВАС ЕСТЬ РЕЗЕРВНОЕ КОПИРОВАНИЕ)И (если возможно, удалить весь проект из папки Iphone Simulator) Потому что иногда предыдущая база данных прилагается.Очистите ваш проект, добавьте базу данных в ваш пакет.Скомпилируйте это ..

Дайте мне знать, если это сработало

Функция Get Path

- (NSString *) getDBPath {
        //Search for standard documents using NSSearchPathForDirectoriesInDomains
        //First Param = Searching the documents directory
        //Second Param = Searching the Users directory and not the System
        //Expand any tildes and identify home directories.
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
        NSString *documentsDir = [paths objectAtIndex:0];
        return [documentsDir stringByAppendingPathComponent:@"MYDB.sqlite"];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...