2014-11-24 3 views
4

Обнаружена очень странная проблема, используя простую операционную систему AFNetworking, даже попробовав с простой операцией NSURLConnection, соединение завершается с ошибкой, если вы поддерживаете приложение и блокируете экран, а затем разблокируете. Работает абсолютно нормально в background.Network lost on lock lock unlock

Любой, столкнувшийся с подобной проблемой с NSURLConnection, хочет поделиться своим решением?

Спасибо.

+0

Это происходит только после того, как пользователь * разблокирует экран? – Antzi

+0

Да точно @Antzi – iphonic

ответ

1

Это похоже на ошибку iOS. Странно, но действие блокировки экрана влияет на NSURLSession как-то, так что он перестает работать и возвращает NSURLErrorNetworkConnectionLost. Поэтому в моем приложении я отказался от использования общего сеанса. Я либо использую новый объект сеанса для каждого запроса, либо (если мне нужно поддерживать один сеанс постоянно) воссоздавайте его каждый раз, когда экран разблокируется. И это работает. Для пользователей AFNetworking или любой другой сторонней библиотеки, работающей сверху NSURLSession, ситуация сложнее, конечно. Вам нужно будет исправить код библиотеки, что определенно не очень хорошо, но я думаю, что нет другого выбора.

0

Очень полезно Andrey Chernukha, В моем случае выяснилось, что вам не нужно каждый раз воссоздавайте новую сессию. Я закончил использование массива для сохранения запущенных NSURLSessionDataTasks и после того, как телефон разблокирован, возобновите их.

Шаги:

  1. Я создал массив NSMutableArray * dataTasksToResume

  2. В - (Недействительными) applicationWillResignActive: (UIApplication *) приложение Я сохранил все задачи dataTasksToResume массив

  3. Отменить все работает NSURLSe ssionDataTasks
  4. В - (Недействительный) applicationDidBecomeActive: (UIApplication *) приложение получить все задачи из массива и возобновлять их (их воссоздание)
  5. Наслаждайтесь!

Надеюсь, что это поможет.