无法更新UITableView

时间:2009-04-03 08:23:46

标签: iphone objective-c

我有UITableViewController作为RootViewController。我需要根据从RootViewController的线程启动的另一个线程获取的数据向表中添加行。当我从其他线程返回到我的RootViewController的线程时,我有更新的数据,但我无法更新TableView。我调用了[self.tableview reloadData];方法,但似乎没有用。我也试过[self.tableview setNeedsDisplay]电话,但没有成功。如何使用新数据更新TableView?

In my RootViewController Class I have:

- (void) reload {

for(int i=0;i<[camDetails count];i++)
 {
    cCameraInformation *obj = [[cCameraInformation alloc] init];
    obj = [camDetails objectAtIndex:i];
    NSString *tString = [[NSString alloc] initWithFormat: @"        Remote     %s     %s",[obj->sCameraid UTF8String],[obj->sCameraid UTF8String]];
    [tableEntry addObject:tString];
 }
 [self.tableView reloadData];
}

然后有一个不断接收数据的接收类线程。它的基类是NSObject。所以,我使用了Application委托类(它有一个RootViewController类的实例)来调用我的接收线程中的RootViewController类的重载数据方法。

我无法使用performSelectorOnMainThread调用上述方法。

2 个答案:

答案 0 :(得分:12)

嘿,你确定要在主线程上更新表视图显示/重新加载tableview吗?我面临同样的问题,数据在那里,但直到用户滚动,tableview没有更新

谷歌搜索后,我知道你需要在主ui线程上调用reloadData方法

下面的代码示例:

- (void) getDataOnNewThread
{
    // code here to populate your data source
    // call refreshTableViewOnMainThread like below:
    [self performSelectorOnMainThread:@selector(refreshTableView) withObject:nil waitUntilDone:NO];
}

- (void) refreshTableView
{
    [tableView reloadData];
}

答案 1 :(得分:1)

确保从初学者的numberOfRowsForSection返回正确的值。

还要确保您的cellForRowAtIndexPath方法正在使用此数据来获取单元格内容。

你的reloadData方法应该在主线程上调用,而不是在任何其他线程上调用。

如果您可以发布相关代码,将能够更好地帮助您。