Хранение данных в базе данных SQLite после закрытия сессии в приложении iPhone - PullRequest
0 голосов
/ 09 марта 2011

Я создаю приложение для iPhone, используя Objective-C, который хранит данные в базе данных SQLite.У меня проблема в том, что когда мое приложение работает, я могу внести определенные изменения в данные в таблице.В частности, мне нужно разрешить пользователю нажимать на кнопку и выбирать определенные рестораны из списка как «любимые» (true) или «не любимые» (false).

Когда работает мой симуляторкод работает нормально.Однако, когда я закрываю сеанс и перезапускаю приложение, изменения, которые я внес в предыдущий сеанс, не сохраняются.Вот соответствующий блок кода:

- (void) addFavourite:(NSString *)rName{


sqlite3 *database;

NSString *updateString = nil;
NSString *trueStatement = @"true";

NavButtonAppDelegate *delegate = [[UIApplication sharedApplication] delegate];

if (sqlite3_open([delegate.databasePath UTF8String], &database) == SQLITE_OK) {

    updateString = @"UPDATE gtarestaurant set isFavourite = ? WHERE name = ?";
    const char *sqlStatement = [updateString UTF8String];
    sqlite3_stmt *compiledStatement;

    if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {

        sqlite3_bind_text(compiledStatement, 1, [trueStatement UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(compiledStatement, 2, [rName UTF8String], -1, SQLITE_TRANSIENT);


        while (sqlite3_step(compiledStatement) == SQLITE_ROW) {


        }

        sqlite3_finalize(compiledStatement);


    }

    sqlite3_close(database);

}

}

Может кто-нибудь увидеть, где я иду не так?Похоже, что моя проблема фиксирует мои изменения в базе данных после того, как пользователь их внесет

Ответы [ 2 ]

0 голосов
/ 10 марта 2011

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

0 голосов
/ 09 марта 2011

Использование:

if(SQLITE_DONE != sqlite3_step(compiledStatement))
    NSAssert1(0, @"Update error: '%s'", sqlite3_errmsg(database));

вместо:

    while (sqlite3_step(compiledStatement) == SQLITE_ROW) {


    }

Существует множество причин сбоя обновления, например, отсутствие таблицы или неправильное написание имени поля.Это должно привести к ошибке, сообщающей, почему обновление не было обработано.Если вы не хотите, чтобы приложение прекратило использовать NSLog вместо NSAssert.

Кроме того: у вас должен быть оператор else вместе с вашим if (sqlite3_open()), чтобы уведомить вас или пользователя о том, что база данных не была открыта должным образом.

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