UITableView reloaddata不会立即重新加载

时间:2010-12-27 11:44:11

标签: iphone cocoa-touch

我正在尝试使用我的iPhone应用中的在线数据。但是因为这个我生气了:

我有使用NSURLConnection下载数据的对象。在单独的线程中使用连接(和其他东西)开始工作的方法 - [ NSThread detachNewThreadSelector:@selector( doConnectionInNewThread ) toTarget: self withObject: nil ];

加载数据时(connectionDidFinishLoading)我将它们提供给我的viewController。这一切都很好。当我使用断点或NSLog时,我已准备好在UITableView中显示数据。当我调用reloadData时,没有任何事情立即发生。它可能在2秒后重新加载数据(在此延迟后调用- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath)。

但是当我滑动tableView时,它会立即重新加载数据。所以连接等工作正常,但它不会重新加载数据。为什么?我认为这可能是由于URLConnection阻止了mainThread。但是现在我在单独的线程中使用它并且它仍然是相同的......

2 个答案:

答案 0 :(得分:2)

您是否在分离的线程中访问表视图?

确保使用以下命令更新主线程上的UI:

-performSelectorOnMainThread:withObject:waitUntilDone:

答案 1 :(得分:0)

您的tableView.reloadData函数可能不在主线程中运行,因此您应在tableview.reloadData()中使用DispatchQueue.main.async在主线程中运行。

示例:

DispatchQueue.main.async {
  tableview.reloadData()
}