FMDB sqlite не может обновлять таблицу на устройстве, но может обновляться на симуляторе

Я новичок в приложении для iOS. В моем приложении для iPhone у меня есть тип базы данных sqlite (data.sqlite) и несколько таблиц (просто вызовите table: A, B, C, ...). У меня проблема, когда я пытаюсь обновить данные в таблицах: table A может успешно обновиться на симуляторе и устройстве iPhone. Но таблица B может обновляться только на симуляторе, не может обновляться на устройстве iPhone (после обновления она показывает НОВЫЕ данные, но если действительно закрытое приложение - дважды щелкните кнопку «Домой» и закройте приложение. А затем снова откройте приложение, данные - это СТАРЫЕ данные)

Этот код предназначен для базы данных инициализации

- (id)init {
    self = [super init];

    NSString *bundelFilePath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"sqlite"];
    NSString *dbPath = [LIBRARY_DIR stringByAppendingPathComponent:@"data.sqlite"];

    //New version
    if ( ![[NSFileManager defaultManager] fileExistsAtPath:dbPath] ) {
        [[NSFileManager defaultManager] copyItemAtPath:bundelFilePath toPath:dbPath error:nil];

        _database = [FMDatabase databaseWithPath:dbPath];
        [_database open];
    }

    return self;
}

Этот код предназначен для обновления

- (void)updateDetails:(NSMutableArray *)details {

    @synchronized(self) {
        [_database beginTransaction];

        for (int i = 0; i< details.count; i++) {
            B *b = [details objectAtIndex:i];

            NSString *sql = [NSString stringWithFormat:@"UPDATE B SET display_order=%d WHERE columnIdx=%d", i, b.colIdx];

            [_database executeUpdate:sql];
        }

        [_database commit];
    }
}

Я использую тот же код для обновления таблицы A, а таблица A успешно обновляется на устройстве и симуляторе. Но у таблицы B возникла проблема. Пожалуйста помоги. Спасибо.


person Bentley    schedule 29.01.2015    source источник


Ответы (1)


Ty заменяет:

NSString *sql = [NSString stringWithFormat:@"UPDATE B SET display_order=%d WHERE columnIdx=%d", i, b.colIdx];

с участием:

NSString *sql = [NSString stringWithFormat:@"UPDATE B SET display_order=? WHERE columnIdx=?", [NSNumber numberWithInt:i], [NSNumber numberWithInt:b.colIdx]];

у вас есть несколько объектов чисел как:

[NSNumber numberWithFloat:floatNumber];

[NSNumber numberWithDouble:doubleNumber];
person Luis Mejías    schedule 04.02.2015