2014-09-21 108 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