AsyncUDPSocket сломал канал после блокировки телефона с приложением, приостановленным в фоновом режиме

Я использую стороннюю библиотеку AsyncUDPSocket в своем приложении для iPhone, и по большей части она отлично работает. У меня есть одноэлементный экземпляр AsyncUDPSocket , который я использую для всего своего сетевого трафика. Мое приложение зарегистрировано для отслеживания местоположения в фоновом режиме и будет просыпаться и отправлять пакеты обновления местоположения по сети при работе в фоновом режиме. Все это отлично работает в фоновом режиме, на переднем плане, если телефон заблокирован или разблокирован, за исключением случаев, когда я делаю следующее:

  1. Запустить мое приложение
  2. Отключить отслеживание местоположения в настройках моего приложения (чтобы не было пробуждения в фоновом режиме)
  3. Нажмите кнопку «Домой» (приложение переходит в фоновый режим, сокет «высушен сублимацией» вместе с остальной частью приложения)
  4. Заблокировать телефон
  5. Разблокировать телефон
  6. Продолжить приложение
  7. Попытка перезапустить отслеживание и отправить что-нибудь из розетки. Как только я попробую, я получаю ошибку SIGPIPE / EPIPE , и приложение вылетает.

Я решил, что лучший способ справиться с этим - закрыть и освободить сокет. всякий раз, когда приложение закрывается и фоновое отслеживание не включено, но когда я пытаюсь [закрытие сокета] или [выпуск сокета] в AsyncUDPSocket , я получаю различные EXC_BAD_ACCESS ошибок. Я сообщил об ошибке команде разработчиков, но мне было интересно, может ли кто-нибудь из присутствующих дать какие-то идеи о том, как полностью избежать ошибки SIGPIPE или другими способами сохранить сокет в рабочем состоянии без его освобождения. Спасибо.

5
задан Nas Banov 26 November 2011 в 05:45
поделиться