2014-09-21 73 views
12

UITableView的reloadData()不刷新显示细胞

class StationViewController : 
    UITableViewController, UITableViewDelegate, UITableViewDataSource { 
    @IBOutlet var stationTableView: UITableView! 

当更新我的数据源中的数据,并做

stationTableView.reloadData() 

这不是在屏幕上立即可见。如果我滚动,倾斜或做其他任何强制重画屏幕的内容,更新的单元格都可见。我可以证实, 的UITableView确实做了更新,通过调用

println("\(stationTableView.visibleCells())") 

打印出预期的细胞。

其余的设置是UINavigationController它有我的StationViewController作为关系。 stationViewController的IBOutlet连接到故事板文件中的UITableView

我似乎需要对屏幕进行“重新绘制”以使我的更新立即可见。我怎么做?

+3

很可能你不是从主线程调用'stationTableView.reloadData()'。 – Artem 2014-09-21 11:09:42

回答

31

感谢Artem,我发现我需要在主线程上调用reloadData()。这是我如何解决这个问题:

func refreshUI() { 
    dispatch_async(dispatch_get_main_queue(),{ 
     self.stationTableView.reloadData() 
    }); 
} 
+0

我试过这个,并得到“预期表达式”构建错误。什么是dispatch_async()? – Ryan 2016-09-08 00:56:24

+2

谢谢,这有助于! 这是Swift的代码3 'func refreshUI(){ DispatchQueue.main.async { self.tableView.reloadData() } }'' – pulp 2016-12-03 23:13:03