在我的iPhone应用程序中,偶尔会看到由tableView:cellForRowAtIndexPath引起的崩溃:在后台线程上调用。为什么tableView:cellForRowAtIndexPath:在后台线程上调用?
显然,这不应该发生。我没有要求它,我的目标是一个委托一个UITableView和基础呼唤它 - 我在堆栈中有问题的线程唯一看到的是
-_WebTryThreadLock(bool) -_dequeuReusableViewOfType -tableView:cellForRowAtIndexPath: -_createPreparedCellForGlobalRow:withIndexPath -_pthread_qathread
在WebTryThreadLock发生崩溃 - 无真的令人惊讶,它不是线程安全的,不应该从主线程中调用。
但我怎么弄清楚为什么我的tableView委托在背景线程上被调用?
我想知道 - 如果我在后台线程上调用[tableView reloadData],会这么做吗?
我一直认为它只是在主线程上调用调用而不管。我不确定我是否在做这件事,但我可能会这样做,而且我会检查一下,但是真的,不应该UIKit检查并在主线程上调用委托方法?
你可以发布详细的崩溃日志。另外,你是否包含任何第三方框架(任何)? –
你问,“不应该UIKit检查?”我可以理解你为什么要这么做,但简单的事实是它不会,你只需确保你的tableview相关调用在主队列中执行。 – Rob
发布您的代码和崩溃日志以获得更好的答案 – Jatin