2

我仍然对 obj-C 很陌生,我正在创建一个带有 tableview 的应用程序,当我将项目添加到 tableview 时需要刷新它。我用谷歌搜索了一些答案,说我需要使用[self.tableView reloadData],但它对我不起作用。

这是我的 tableView 的代码

- (NSInteger)numberOfSectionsInTableView:(UITableView *) tableView {
     return 1; }

- (NSString *) tableView:(UITableView *) tableView titleForHeaderInSection:(NSInteger)section {
     NSString *myTitle = [[NSString alloc] initWithFormat:@"Runs"];
     return myTitle;
      }

- (NSInteger) tableView:(UITableView *) tableView numberOfRowsInSection:(NSInteger)section {

     return [entries count];
     }

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

     static NSString *CellIdentifier = @"Cell";

     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier
 forIndexPath:indexPath];

     // Set up the cell...
     NSString *cellValue = [entries objectAtIndex:indexPath.row];
     cell.textLabel.text = cellValue;

     return cell; 
}

这是我填充表格的代码

- (void)populateTable{
     AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
     NSString *username = appDelegate.username;
     entries = [[NSMutableArray alloc]init ];
     [self openDB];
     NSString *sql = [NSString stringWithFormat:@"SELECT * FROM Savings WHERE username = '%@'",username];
     sqlite3_stmt *statement;

     if(sqlite3_prepare_v2(runnerAppDB, [sql UTF8String], -1, &statement, nil)==SQLITE_OK)
     {
         while(sqlite3_step(statement)==SQLITE_ROW)
         {

             char *field1 = (char *) sqlite3_column_text(statement, 0);
             NSString *field1Str = [[NSString alloc] initWithUTF8String:field1];

             //   username - distance - speed - date - comment
             NSString *str = [[NSString alloc] initWithFormat:@"%@ %@ %@ - %@", field1Str];
             [entries addObject:str];

         }
     } }

我已经尝试做的是每次我向数据库添加一些东西时调用 populateTable 函数,但它仍然没有刷新,有人可以帮我吗?一段时间以来一直被这个问题困扰。

谢谢

4

3 回答 3

1

尝试一下....

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:YES];
    [self.myTableView reloadData];
}
于 2013-04-03T09:40:21.023 回答
0

在所有数据都在您感觉表格的数组中之后,您需要重新加载表格。并且在 tableview 的 cellforrowatindexpath 方法中,您需要重用 cell 。请更新您的 cellforrow 方法。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

         static NSString *cellIdentifier = @"ArticleCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell == nil) 
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];
    }

   NSString *cellValue = [entries objectAtIndex:indexPath.row];
   cell.textLabel.text = cellValue;

    return cell;

 }
于 2013-04-03T10:04:45.577 回答
0

一旦表的数据源发生变化,那么只有你需要重新加载表。一旦数据源受到影响,只需检查您是否重新加载表视图。像这样。

- (void)populateTable{
     AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
     NSString *username = appDelegate.username;
     entries = [[NSMutableArray alloc]init ];
     [self openDB];
     NSString *sql = [NSString stringWithFormat:@"SELECT * FROM Savings WHERE username = '%@'",username];
     sqlite3_stmt *statement;

     if(sqlite3_prepare_v2(runnerAppDB, [sql UTF8String], -1, &statement, nil)==SQLITE_OK)
     {
         while(sqlite3_step(statement)==SQLITE_ROW)
         {

             char *field1 = (char *) sqlite3_column_text(statement, 0);
             NSString *field1Str = [[NSString alloc] initWithUTF8String:field1];

             //   username - distance - speed - date - comment
             NSString *str = [[NSString alloc] initWithFormat:@"%@ %@ %@ - %@", field1Str];
             [entries addObject:str];

         }
     }
   [self.tableView reloadData]
 }
于 2013-04-03T12:31:36.517 回答