我有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调用上述方法。
答案 0 :(得分:12)
下面的代码示例:
- (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方法应该在主线程上调用,而不是在任何其他线程上调用。
如果您可以发布相关代码,将能够更好地帮助您。