Приложение iPhone теряет подключение к Интернету (NSURLConnection не возвращается)

У меня проблема, которую невероятно сложно отладить. Если мое приложение использует Wi-Fi и простаивает около 30 минут, иногда, когда я его просыпаю, NSURLConnection больше не отвечает. Запросы отправляются, но не возвращаются.

Сначала я подумал, что это ошибка памяти, когда экземпляры выпускаются слишком рано и поэтому никогда не возвращают ответ. Однако, если я помещаю приложение в фоновый режим, захожу в настройки, выключаю Wi-Fi, чтобы использовать только 3G, и возвращаюсь в приложение, подключение к Интернету волшебным образом оживает, и все ожидающие NSURLConnections возвращаются и завершаются.

Очевидно, это проблема для людей, использующих Wi-Fi. Это действительно проблема с Wi-Fi или я что-то упустил? Переход к другому приложению, например Safari, использование радио Wi-Fi и возвращение в мое приложение не решает проблему - соединения по-прежнему не возвращаются. Я отследил это с помощью Xcode, и у меня заканчиваются идеи.

Также установлен флаг Info.plist «Приложение использует WiFi», и это прошивка 5.1. "Приложение использует Wi-Fi" - это то же самое, что и UIRequiresPersistentWiFi?

Обновление: это не имеет ничего общего с флагом Wi-Fi - он может умереть в течение 5 минут. Пока что мне удалось скопировать его только на моем iPhone 4s с прошивкой 5.1. На самом деле это не решение, но я стираю телефон, чтобы попробовать его с новой установкой, чтобы посмотреть, имеет ли это какой-либо эффект. Я проверил, что NSURLConnection всегда вызывается в основном потоке, и установил точки останова на connection:failedWithError: и connection:didReceiveResponse:. Когда соединение прерывается, ни один из них не возвращается, пока я не отключу и снова не включу Wi-Fi, а затем все вернется сразу. Это также происходит на локальном сервере, и сервер все равно возвращается, если я пингую его с помощью веб-браузера.


person Shaun Budhram    schedule 14.04.2012    source источник
comment
Вы пробовали установить флаг UIRequiresPersistentWiFi?   -  person esqew    schedule 14.04.2012
comment
Думаю, да - в файле pList включено «Приложение использует WiFi».   -  person Shaun Budhram    schedule 14.04.2012
comment
Вы случайно блокируете основную ветку? Вы пробовали использовать синхронные NSURLConnections в фоновом потоке?   -  person magma    schedule 17.04.2012
comment
Да, я почти уверен, что основной поток не заблокирован, потому что мое приложение все еще реагирует, и я могу переключать вкладки. Далее я попробую синхронные соединения в фоновых потоках.   -  person Shaun Budhram    schedule 18.04.2012


Ответы (2)


Для всех, кто сталкивается с этой проблемой, это связано с TestFlight v1.0 и ниже:

Почему NSURLConnection не достигает серверной части?

person Shaun Budhram    schedule 24.04.2012
comment
Я уже несколько недель теряю рассудок из-за этой ошибки. Спасибо Спасибо спасибо! - person Paul Kehrer; 28.04.2012

Вы действительно передаете / получаете какие-либо данные через NSURLConnection? Если нет, возможно ли, что вы достигли тайм-аута TCP-сеанса? Кажется маловероятным, если проблема не исчезнет на локальном сервере, но любой промежуточный брандмауэр / инспектор пакетов с отслеживанием состояния может отключать ваше TCP-соединение.

person Conrad Shultz    schedule 17.04.2012
comment
Я думал, что возможно, что я как-то на самом деле не отправляю NSURLConnection в некоторых случаях, поскольку я создаю подклассы. Я буду смотреть в него. Возможно, тестирование без подкласса может это исправить. Спасибо за предложение. - person Shaun Budhram; 18.04.2012