如果在reloadData后需要立即獲取tableview的cell、高度,或者需要滾動tableview。
如果直接在reloadData后執行代碼是有可能出問題的,比如indexPath為nil等等異常情況。
[tableView reloadData]並不會等待tableview更新結束后才執行后續代碼,
而是立即執行后續代碼,然后異步地去計算scrollView的高度,獲取cell等等。
如果表中的數據非常大,在一個run loop周期沒執行完,
這時就顯示tableView視圖數據的操作就會出問題了。
Apple並沒有直接提供reloadData的api,想要程序延遲到reloadData結束在操作。
可以通過以下方法:
1. 通過layoutIfNeeded方法,強制重繪並等待完成。
[self.tableView reloadData]; [self.tableView layoutIfNeeded]; //刷新完成,執行后續需要執行的代碼
2.reloadData方法會在主線程執行,通過GCD,使后續操作排隊在reloadData后面執行。
[self.tableView reloadData]; dispatch_async(dispatch_get_main_queue(), ^{ //刷新完成,執行后續代碼
});
參考鏈接:http://blog.csdn.net/cuibo1123/article/details/48558213
感謝原作者!
轉載請注明出處:http://ficow.cn
