Когда запускается NSURLSession?

У меня есть ситуация, в которой, когда устройство получает push-уведомление, я бы отправил NSURLSession в сочетании с NSURLConnection. У меня есть пара вопросов относительно NSURLSession.

Возобновляется ли NSURLSession's Data Task автоматически в фоновом режиме при потере подключения к Интернету?

Попытается ли NSURLSession автоматически завершить задачу, если изначально нет интернета, или сессия просто возвращается с ошибкой?


person user2856517    schedule 07.10.2013    source источник
comment
Если это задача данных, вам не разрешено работать в фоновом режиме.   -  person lost found    schedule 23.10.2013


Ответы (3)


Похоже, вы должны справиться с повторной попыткой.

Когда любая задача завершается, объект NSURLSession вызывает метод URLSession:task:didCompleteWithError: делегата либо с объектом ошибки, либо с nil, если задача выполнена успешно. Если задача является возобновляемой задачей загрузки, словарь userInfo объекта NSError содержит значение для ключа NSURLSessionDownloadTaskResumeData. Ваше приложение должно использовать API достижимости, чтобы определить, когда следует повторить попытку, а затем должно вызывать downloadTaskWithResumeData: или downloadTaskWithResumeData:completionHandler: для создания новой задачи загрузки для продолжения этой загрузки. Перейдите к шагу 3 (создание и возобновление объектов задачи).

https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/URLLoadingSystem/NSURLSessionConcepts/NSURLSessionConcepts.html

person Ryan Burke    schedule 08.10.2013

Автоматически возобновляет ли задача данных NSURLSession в фоновом режиме, если подключение к Интернету потеряно?

Если подключение к Интернету потеряно, вы получите сообщение об ошибке NSURLErrorNetworkConnectionLost (код ошибки: -1005) в методе делегата URLSession:task:didCompleteWithError. Вы несете ответственность за повторную попытку и/или аннулирование сеанса с помощью invalidateAndCancel или finishAndInvalidate (хотя он уже будет завершен в случае потери сетевого подключения).

Пытается ли NSURLSession автоматически выполнить задачу, если изначально нет интернета, или сеанс просто возвращается с ошибкой?

Если нет подключения к Интернету, вы получите сообщение об ошибке NSURLErrorNotConnectedToInternet (код ошибки: -1009) в методе делегата URLSession:task:didCompleteWithError. Вы несете ответственность за аннулирование сеанса (при необходимости) с помощью invalidateAndCancel или finishAndInvalidate (он уже будет завершен в случае отсутствия подключения к Интернету).

Рекомендации:

Руководство по программированию системы загрузки URL

Справочник по базовым константам

person Jonathan    schedule 17.10.2013

Если вы используете фоновые конфигурации с NSURLSession, делегаты вызываются в случае успеха/неудачи, когда ваше приложение активно или находится в фоновом режиме. Созданная вами задача передается демону ОС, и ваше приложение пробуждается или даже запускается (если оно было убито iOS) с помощью

`application:handleEventsForBackgroundURLSession:completionHandler`:

И когда все задачи будут завершены, ваш делегат сеанса будет вызван с помощью

URLSessionDidFinishEventsForBackgroundURLSession:   

Дополнительные сведения о фоновом сеансе см. в разделе здесь

Вы также можете получить образец кода Apple здесь и найдите «Простая фоновая передача»

person Zeev Vax    schedule 31.10.2013