Отладка неотзывчивого интерфейса в симуляторе

Когда в какой-то момент я запускаю свое приложение в симуляторе, пользовательский интерфейс перестает отвечать на запросы (представление таблицы не прокручивается, кнопки не реагируют и т. Д.).

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

Я посмотрел на измеритель ЦП и все потоки, кажется, на 0%. Как ни странно, если я попытаюсь профилировать с помощью инструментов, то пользовательский интерфейс не будет заблокирован. Я также не заметил ничего странного в инструментах, загрузка процессора кажется нормальной / низкой, а профилировщик времени, похоже, не показывает странного поведения.

Мой общий вопрос: каковы другие причины, по которым пользовательский интерфейс может перестать отвечать, даже если загрузка процессора равна 0? Каковы лучшие способы отладки такого рода вещей?

Более конкретно: детали приложения, вероятно, слишком сложны для этого конкретного вопроса, но только для некоторого контекста:

  • Я использую AFIncrementalStore + CoreData
  • Отказ пользовательского интерфейса происходит только тогда, когда я пытаюсь получить несколько связей (через добавочный делегат хранилища).
  • В течение этого времени, кажется, нет никакой сетевой активности (что я могу сказать). Я могу отслеживать журналы на моем сервере, и, кажется, ничего не происходит в это время.
  • Как упоминалось выше, при работе с инструментами / профилированием пользовательский интерфейс не блокируется.
  • Я тестирую это с одним контроллером представления, используя извлеченный контроллер результатов для извлечения данных.

Мое предположение заключается в том, что где-то в главном потоке происходит тупик, поэтому загрузка процессора составляет 0%, но пользовательский интерфейс по-прежнему не отвечает. Я понятия не имею, как отладить это как бы то ни было. Это может быть что-то глубокое в земле CoreData или что-то в одном из сторонних классов AF. Я разбросал точки останова повсюду, и ни одна из них не получила удар.

Я почесал голову уже несколько часов. Не вдаваясь в подробности о реализации моего конкретного приложения, я надеялся получить несколько общих советов по отладке для такого рода проблем. Что-нибудь еще, что я должен попробовать?

Я использую XCode 5.0.2, симулятор работает на iOS 7.0.3 (чего бы это ни стоило).

Любые советы и рекомендации приветствуются!

0 ответов

Другие вопросы по тегам