2013-08-03 64 views
0

有人可以爲我澄清一些東西。爲UITableView蘋果文件說當uitableview調用reloaddata

`UITableView` overrides the layoutSubviews method of `UIView` so that it calls reloadData only when you create a new instance of `UITableView` or when you assign a new data source. 

,我發現了以下行爲:

在我viewDidLoad,我有tableView.dataSource = self.

在我getDataFromDatabase,我叫[tableView reloadData]。這似乎工作正常,但我認爲發生了什麼是表正在填充一個空白數組,然後,當數據庫調用回來,它重新加載與數據的數組。

我試圖執行以下操作: 在viewDidLoad中,刪除tableView.dataSource = self;,並將其添加到getDataFromDatabase方法中。例如

(void)getDataFromDatabase 
{ 
    [getData completionHandler^() // an async db call 
    { 
     tableView.dataSource = self; 
    }]; 
} 

這似乎沒有工作。該表未填充。如果我在設置dataSource = self後添加[tableView reloadData],但在文檔中,當我設置dataSource = self時,它不應該自動調用reloadData「僅當您創建UITableView的新實例或分配新數據源時纔會調用reloadData。 「 ?

+0

請從數據庫中提取詳細信息後檢查你的數組。如果您的查詢無法獲取記錄,那麼哪些數據將在表視圖中重新載入 – chandan

+0

@Jason給定的代碼有許多錯別字。也許這只是一個問題。請複製並粘貼編譯器能夠無誤地解析的代碼。 – CouchDeveloper

回答

0

你的「completionHandler」是否在主線程上運行?如果沒有,或者您不確定,請嘗試在主線程上執行您的代碼。因爲根據蘋果文檔,不更新主線程上的UI的結果是不確定的。你可以試試這個:

[getData completionHandler^() // an async db call 
{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     tableView.dataSource = self; 
    }); 

}]; 
+0

嗨,liuyaodong - 謝謝你。我試過了,但它似乎仍然不起作用。任何其他想法?很奇怪... – Jason