Как отладить не отвечающую асинхронную NSURLConnection

#asynchronous #nsurlconnection #freeze

#асинхронный #nsurlconnection #замораживание

Вопрос:

и под не отвечающим я подразумеваю, что после первых трех успешных подключений инициируется четвертое соединение, и ничего не происходит, никаких сбоев, никаких функций делегирования не вызывается, данные не отправляются (согласно wireshark)… он просто сидит там?!

Я полтора дня ломал голову над этим… iOS 4.3.3, последняя версия xCode, происходит таким же образом на реальном устройстве, как и в симуляторе. Я прочитал все сообщения о NSURLConnection на форумах разработчиков… Я в растерянности.

Из моего делегата приложения я запускаю асинхронную NSURLConnection в соответствии с документами Apple, используя делегат приложения в качестве делегата для NSURLConnection.

Из моего приложения, которое завершает запуск… Я запускаю два начальных запроса, которые успешно возвращают XML, который я затем передаю в OperationQueue для анализа. Я могу даже зацикливаться, повторяя эти запросы без проблем, повторял их 10 раз и работал просто отлично.

Следующая серия из пяти запросов запускается с помощью пользовательского ввода. Первый запрос выполняется успешно и возвращает правильный ответ, затем создается следующий запрос, и когда он используется для создания NSURLConnection (как и все остальные), он просто остается там.?!

Обычные вызовы делегата, которые я вижу во всех других запросах, никогда не видны. По данным Wireshark, по проводам ничего не передается? Я переупорядочил запросы, и независимо от запроса, после первого запроса следующий завершается неудачей (завершается неудачей, поскольку ничего не делает, никаких ошибок или прерываний, просто сидит там)

Очевидно, что это заложено в моем коде, но я к этому слеп.

Итак, какие еще инструменты я могу использовать для отладки асинхронного NSURLConnection… как я могу определить, что он делает? если вообще есть.

Любые предложения по отладке NSURLConnection или другие способы выполнить то же самое, что делает NSURLConnection??

Спасибо за любую помощь, которую вы можете предложить…

Комментарии:

1. … может быть, опубликовать здесь какой-нибудь код?

2. этого много, поэтому я просто ищу советы о том, как дальше отлаживать NSURLConnection.

Ответ №1:

О’Кей отследил это… Я наблюдал дамп стека в каждом потоке, когда собирался запустить каждое соединение NSURLConnection, все первые три были в основном потоке, как и ожидалось… четвертый оказался в новом потоке?! В одном из моих потоков NSOperation?!?! Как оказалось, я непреднамеренно добавил логику (?), которая запустила одно из моих NSURLConnection в последнем вызове NSOperation для didFinishParsing: таким образом, NSURLConnection было запущено асинхронно, а затем NSOperation завершилась … >.<

Итак, я уберу NSURLConnection из didFinishParsing, и он должен остаться в основном цикле, и у меня все должно быть хорошо!

Комментарии:

1. Потрясающе! Я бился об это головой. Логика, которая впоследствии выполняла мой HTTP-вызов, запускалась из другого потока. Как только я добавил execute в основной поток, мои HTTP-запросы снова заработали. Это сбило меня с толку, потому что это работало до тех пор, пока я не изменил кое-какой код. Так что какое-то время я сходил с ума 🙂