【问题标题】:refresh uitableview on button click getting data from webservice刷新 uitableview 按钮单击从 web 服务获取数据
【发布时间】:2013-10-08 18:22:45
【问题描述】:

我正在尝试实现一个功能,即当单击 uitabbar 上的刷新按钮时,会调用一个返回某些数据的 web 服务。数据存储在 sqlite db 中,然后呈现在 tableview 上。我的问题是,当从服务中获取新数据时,数据库会更新,但更新后的记录不会立即显示在 tableview 中。我必须重新启动应用程序才能看到更新的记录。下面是我在点击重新加载按钮时调用的代码:

更新代码:

-(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);
}

【问题讨论】:

  • 显示 reloadData 方法
  • uitableview 中的类方法
  • 尝试调用 [vrnTable reloadData] 而不是线程
  • 已经这样做了。不工作
  • “表已更新”是否被记录?

标签: ios uitableview refresh reload


【解决方案1】:

想知道您在哪里存储数据以在表格视图中显示。我的意思是我们通常使用 NSArray 来存储 tableview 的数据,在 tableView:cellForRowAtIndexpath: 方法中使用它从数组中获取数据并将其放置在单元格上。您是从 sqlite 表还是您正在使用的任何变量更新该数组。

更新代码:

-(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.entries removeAllObjects];

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);

[self.vrnTable reloadData];

}

【讨论】:

  • 是的。我正在从 sqlite 更新数据。我想要做的是在点击刷新按钮时,表格视图变得清晰,调用服务并且表格填充了最新数据。
  • @HassanZaheer 在从 sqlite 获取数据到您的 _entries 变量后,在方法结束时调用 tableView reloadData 函数。您在进入变量之前调用 reloaddata。
  • 这只会将新数据添加到表中。在用新数据填充表格视图之前,我必须删除以前的数据。
  • 知道了。在添加新对象之前必须从数组中删除所有对象。
  • 是的,只显示新数据,我们需要从数组中删除所有以前的对象并用新的对象加载它。如果您认为正确,请在正确的答案上打勾。享受编码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多