Почему tableView: cellForRowAtIndexPath: вызывается в фоновом потоке?

В моем приложении для iPhone я иногда вижу сбой, вызванный tableView: cellForRowAtIndexPath: вызывается в фоновом потоке.

Очевидно, этого не должно быть. Я не называю это, мой объект является делегатом UITableView, и фонд вызывает его – единственное, что я вижу в стеке для рассматриваемого потока, – это

 -_WebTryThreadLock (BOOL)
 -_dequeuReusableViewOfType
 -tableView: cellForRowAtIndexPath:
 -_createPreparedCellForGlobalRow: withIndexPath
 -_pthread_qathread

Авария происходит в WebTryThreadLock – неудивительно, что это не потокобезопасно и не следует отвлекать от основного потока.

Но как мне понять, почему мой делегат tableView вызывается в фоновом потоке?

Мне интересно – если бы я должен был вызвать [tableView reloadData] в фоновом потоке, сделал бы это?

Я всегда думал, что он просто отправит вызов на главную нить. Я не уверен, что я это делаю, но могу быть, и я проверю это, но на самом деле, не должен ли UIKit проверять это и называть методы делегата в основном потоке?

2 Solutions collect form web for “Почему tableView: cellForRowAtIndexPath: вызывается в фоновом потоке?”

Вы не можете вызвать [tableView reloadData] во вторичном потоке. Вы не можете называть какой-либо материал UIKit на вторичном потоке (за некоторыми исключениями, например, UIImage ). Это включает в себя все методы tableView, включая прямые геттеры и сеттеры. Не имеет значения, относится ли это отношение или нет.

Возможно, было бы интересно побрызгать некоторые из них вокруг вашего контроллера:

if (! [NSThread isMainThread]) {NSLog (@ "Huh?"); }

Я почти уверен, что UIKit / IOS не решит, что сам по себе вызовет метод делегата табличного представления в фоновом потоке. У вас есть dispatch_async, detachNewThreadSelector, выполняетSelectorInBackground?

  • Отключение UITableView из-за теней и границ
  • iOS Swift: данные Tableview исчезают, когда я просматриваю их
  • почему моя функция называется дважды?
  • Добавить ячейку внизу UITableView в iOS
  • Определите высоту интерфейса UIWebView на основе динамического локального содержимого с переменной высотой TableViewCell
  • TableViewCell с проблемой ограничения автозапуска
  • UITableView появляется с пустыми ячейками
  • Не удалось установить изображение для UIBarButtonItem
  • Динамическое изменение размера UITableViewCell Heights в iOS Swift
  • вызов отменяет смену кадра
  • Swift - проблема ограничений в расширяемом TableViewCell
  • Interesting Posts

    Сегодня виджет расширения зависает, когда основное приложение обновляется

    Вызывает ли метод removeAllObjects в выпуске памяти NSArray или NSMutableArray?

    Класс Objective C не может найти определение для протокола Swift

    MPNowPlayingInfoCenter – прошедшее время продолжает отсчет, когда аудио приостановлено

    приложение записывает числа в экраны iPad, как я могу это предотвратить?

    Получить электронную почту по умолчанию в устройстве iOS

    Как запросить метаданные в CloudKit JS?

    Отображать прозрачный цветной ViewController над другим ViewController в iOS 7

    Как сохранить упорядоченный список в Core Data

    Почему быстрое перечисление происходит быстрее, чем обычная итерация?

    Как проверить версию приложения, которая была первоначально установлена ​​пользователем в iOS

    Перенос основных данных из нескольких версий

    Travis Swift: подавить предупреждения с этапа компиляции подкачки

    Xamarin.Forms – TypeLoadException Ошибка при загрузке типа

    Как выравнивать текст кнопки влево?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.