Почему 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?

  • Анимация выглядит неудобно при удалении ячейки, высота которой больше, чем другие ячейки
  • Как настроить высоту заголовка таблицы в swift?
  • UITableViewCell ведет себя по-разному в iOS7 и iOS8-симуляторе, используя xcode6 beta6 interface builder
  • iOS - UITableView не прокручивается до нижней
  • Кнопка в UITableViewCell не отвечает в соответствии с ios 7
  • Объединение статического и прототипного содержимого в виде таблицы
  • UITableViewCell, показать кнопку удаления в стиле салфетки без салфетки
  • Можно ли использовать UIWebView / WKWebView для загрузки динамического контента в UITableViewCell?
  • Как обновить данные в tableview с помощью swift?
  • как использовать UITableView без UITableViewController
  • Как установить Accessoryview на статический UITableViewCell?
  • Interesting Posts

    Сохранение строковых / текстовых данных UITextView

    iOS получает уведомления Media Player, когда приложение находится в фоновом режиме

    Доступ к основному классу приложений из целевой цели – iOS

    Эффект пейджинга для заголовка в навигационной панели iOS

    Как скрыть inputAccessoryView без отклонения клавиатуры

    Основные данные Легкая миграция не работает, когда присутствует свойство Fetched

    UIStackView Скрыть вид анимации

    Добавление FacebookSDK.framework в мою собственную статическую библиотеку

    Хранение данных в приложении Swift iOS для последующего использования

    Отправить массив в качестве параметра в запросе POST Alamofire

    Как поместить элемент UIPageControl поверх скользящих страниц в UIPageViewController?

    Push Notifications – подписные устройства с маркерами с использованием сертификатов, не предоставляющих Push on iOS

    Компиляция FFmpeg в ios swift

    Анимация UILabel вверх и вниз

    хранение данных локально на iphone

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