Подтвердить что ты не робот

IOS9 - Это приложение модифицирует механизм автозапуска из фонового потока - где?

Для поиска сообщение об ошибке:

Это приложение модифицирует механизм автозапуска из фонового потока, что может привести к повреждению двигателя и странным сбоям. Это приведет к исключению в будущей версии.

Я знаю, что это означает, что некоторый код UIKit вызывается из фонового потока, и я знаю, что решение состоит в том, чтобы обернуть код в

dispatch_async(dispatch_get_main_queue(), ^(void){ <code> });

Моя проблема заключается в поиске, где это сделать, поскольку ни одна из трассировок печатного стека не ссылается на мой код приложения. Мои доказательства, подтверждающие это отрицание, - это поиск (command-f) в окне вывода отладки для имени моего приложения; У меня осталось 24 стека, и мое имя приложения не принадлежит ни одному из них, кроме верхнего сообщения с сообщением об ошибке. Я могу опубликовать один из них, но это не очень полезно.

В тех случаях, над которыми я работаю сегодня, это происходит при переходе к контроллерам представлений после viewWillDisappear() и до viewWillAppear(). Я нашел части моего кода, чтобы обернуть dispatch_async(), но все они обрабатываются сейчас. У меня есть точки останова и отладочные сообщения, где объекты, относящиеся к контроллерам представления, распределяются и освобождаются, и все они запускаются после появления сообщений об исключениях. Это происходит как на симуляторе, так и на моем iOS9 iPhone, как в режимах отладки, так и в режиме выпуска.

Как я могу определить код фона, который, по-видимому, изменяет пользовательский интерфейс?

4b9b3361

Ответ 1

Этот код PSPDFUIKitMainThreadGuard вызывает утверждения о доступе UIKit за пределами основного потока

Шаги для использования:

  • Добавить в проект и скомпилировать этот файл без ARC
  • Перенести определение PSPDFAssert в первый файл
  • Вызов комментария PSPDFLogError, поскольку он не определен
  • import <UIKit/UIKit.h>

Ваше приложение будет аварийно завершено и остановится с любым исправлением, чтобы изменить любой элемент пользовательского интерфейса из фонового потока

Для быстрого использования используйте следующий код: NBUIKitMainThreadGuard

Ответ 2

NSOperationQueue.mainQueue().addOperationWithBlock(){
[YOUR CODE]
}