Я написал огромное приложение для iPad 2 года назад, и теперь я возвращаюсь к нему и обновляю его до iOS5. Это немного грязно, так как это было мое первое большое приложение для iPad.
У него есть шаг «синхронизации», который может длиться несколько минут, и это набор вызовов асинхронных методов, которые идут и извлекают JSON из URL-адреса и помещают их в основные данные. Довольно часто приложение зависает (пользовательский интерфейс не отвечает).
Какие есть хорошие методы для отслеживания этого замораживания? Отладчик не так полезен, поскольку, если код не выполняется в основном потоке, у вас нет пригодной для использования трассировки стека. Приложение также часто не восстанавливается, что предполагает какую-то ситуацию блокировки.
Вот один конкретный пример, который может помочь:
Я приостановил выполнение, как только убедился, что оно заморожено. Кажется, что он каждый раз зависает на одной и той же строке - простое задание. Что здесь происходит? Это так расстраивает.
Является ли это причиной доступа к основным данным? Любые указатели будут очень признательны.
РЕДАКТИРОВАТЬ 29 ИЮНЯ 2012 г.
Нажмите здесь, чтобы увидеть исходный код класса, который выполняет все действия по созданию/обновлению/удалению основных объектов данных. Мне просто нужно остановить зависание / сбой в этом приложении. Я знаю, что это беспорядок, это заставляет меня съеживаться тоже. Я написал это 2 года назад, почти не зная объектива-c.Я должен переписать это, но я должен заставить это работать и выбросить из головы через 2 дня. Может ли кто-нибудь дать мне указания на подходы к быстрому обеспечению потокобезопасности? Могу ли я обернуть каждый метод, который обновляет NSManagedObjectContext, в код блока большой центральной диспетчеризации?