When does NSURLSession run?

给你一囗甜甜゛ 提交于 2019-12-03 08:29:55

Looks like it's down to you to handle the retry.

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

Does NSURLSession's Data Task automatically resume in the background, if internet connection is lost?

If the internet connection is lost you will receive an error, NSURLErrorNetworkConnectionLost (error code: -1005), in the delegate method URLSession:task:didCompleteWithError. You are responsible for retrying and/or invalidating the session using invalidateAndCancel or finishAndInvalidate (it will have already finished though in the case of a network connect loss).

Does NSURLSession automatically attempt to complete the task if there is no internet initially, or does the session just return with an error?

If there is no internet connection you will receive an error, NSURLErrorNotConnectedToInternet (error code: -1009), in the delegate method URLSession:task:didCompleteWithError. You are responsible for invalidating the session (if needed) using invalidateAndCancel or finishAndInvalidate (it will have already finished though in the case of no internet connection).

References:

URL Loading System Programming Guide

Foundation Constants Reference

If you use background configurations with NSURLSession the delegates are getting called on success/failure when your app is Active or in the background. The task you created are handed over to a demon of the OS and your app is being waken up or even started (if it killed by iOS) using

`application:handleEventsForBackgroundURLSession:completionHandler`:

And when all the tasks completed your session delegate would be called with

URLSessionDidFinishEventsForBackgroundURLSession:   

More details on background session are here

You can also get apple sample code here and look for "Simple Background Transfer"

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!