2013-10-07 8 views
5

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

NSURLSession's Задача данных автоматически возобновляется в фоновом режиме, если интернет-соединение потеряно?

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

+0

Если это задача данных, которую вы не можете запускать в фоновом режиме –

ответ

3

Похоже, что вам нужно справиться с повторением.

When any task completes, the NSURLSession object calls the delegate’s URLSession:task:didCompleteWithError: method with either an error object, or nil if the task completed successfully. If the task is a resumable download task, the NSError object’s userInfo dictionary contains a value for the NSURLSessionDownloadTaskResumeData key. Your app should use reachability APIs to determine when to retry, and should then call downloadTaskWithResumeData: or downloadTaskWithResumeData:completionHandler: to create a new download task to continue that download. Go to step 3 (creating and resuming task objects).

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

3

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

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

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

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

Ссылки:

URL Loading System Programming Guide

Foundation Constants Reference

1

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

`application:handleEventsForBackgroundURLSession:completionHandler`: 

И когда все задачи завершения сеанса делегат будет вызывается с

URLSessionDidFinishEventsForBackgroundURLSession: 

Более подробную информацию на фоне сессии являются here

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

Смежные вопросы