在我的iPhone應用程序中,偶爾會看到由tableView:cellForRowAtIndexPath引起的崩潰:在後臺線程上調用。爲什麼tableView:cellForRowAtIndexPath:在後臺線程上調用?
顯然,這不應該發生。我沒有要求它,我的目標是一個委託一個UITableView和基礎呼喚它 - 我在堆棧中有問題的線程唯一看到的是
-_WebTryThreadLock(bool) -_dequeuReusableViewOfType -tableView:cellForRowAtIndexPath: -_createPreparedCellForGlobalRow:withIndexPath -_pthread_qathread
在WebTryThreadLock發生崩潰 - 無真的令人驚訝,它不是線程安全的,不應該從主線程中調用。
但我怎麼弄清楚爲什麼我的tableView委託在背景線程上被調用?
我想知道 - 如果我在後臺線程上調用[tableView reloadData],會這麼做嗎?
我一直認爲它只是在主線程上調用調用而不管。我不確定我是否在做這件事,但我可能會這樣做,而且我會檢查一下,但是真的,不應該UIKit檢查並在主線程上調用委託方法?
你可以發佈詳細的崩潰日誌。另外,你是否包含任何第三方框架(任何)? –
你問,「不應該UIKit檢查?」我可以理解你爲什麼要這麼做,但簡單的事實是它不會,你只需確保你的tableview相關調用在主隊列中執行。 – Rob
發佈您的代碼和崩潰日誌以獲得更好的答案 – Jatin