0

uitabbar の更新ボタンをクリックすると、特定のデータを返す Web サービスが呼び出されるような機能を実装しようとしています。データは sqlite db に保存され、テーブルビューにレンダリングされます。私の問題は、サービスから新しいデータがフェッチされると、データベースが更新されますが、更新されたレコードがテーブルビューにすぐに表示されないことです。更新されたレコードを表示するには、アプリケーションを再起動する必要があります。以下は、リロードボタンをタップすると呼び出される私のコードです:

更新されたコード:

-(void)get_vrns {
    NSLog(@"Refreshing...");
    NSString *delete = [NSString stringWithFormat:@"DELETE FROM VRN"];
    NSString *insert = [NSString stringWithFormat:@"INSERT INTO VRN ('VRNumber') VALUES ('%@')", @"LEC8-9436"];
    insert = @"INSERT INTO VRN ('VRNumber') VALUES ('LEC-876'); INSERT INTO VRN ('VRNumber') VALUES ('AAA-564');INSERT INTO VRN ('VRNumber') VALUES ('ABD-908'); INSERT INTO VRN ('VRNumber') VALUES ('AHF-540');";

    char *err;
    if (sqlite3_exec(db, [delete UTF8String], NULL, NULL, &err) == SQLITE_OK) {
        if (sqlite3_exec(db, [insert UTF8String], NULL, NULL, &err) != SQLITE_OK) {
            sqlite3_close(db);
            NSAssert(0, @"Could not update table");
        }
        else {
            NSLog(@"Table updated");
        }
    }
    else {
        sqlite3_close(db);
        NSAssert(0, @"Could not delete records");
    }
    [self.vrnTable reloadData];
    NSString *select = [NSString stringWithFormat:@"SELECT VRNumber FROM VRN"];
    sqlite3_stmt *statement;

    if (sqlite3_prepare_v2(db, [select UTF8String], -1, &statement, nil) == SQLITE_OK) {
        while (sqlite3_step(statement) == SQLITE_ROW) {
            char *vrn = (char *) sqlite3_column_text(statement, 0);
            NSString *vrnStr = [[NSString alloc] initWithUTF8String:vrn];

            NSString *str = [[NSString alloc] initWithFormat:@"%@", vrnStr];
            [_entries addObject:str];
        }
    }
    else {
        NSAssert1(0, @"Error: Because %s", sqlite3_errmsg(db));
    }
    NSLog(@"%@", self.entries);
}
4

1 に答える 1