6

我有一种情况,当设备收到推送通知时,我会发送一个NSURLSessionNSURLConnection. 我有几个关于NSURLSession.

NSURLSession's如果互联网连接丢失,数据任务是否会在后台自动恢复?

NSURLSession如果最初没有互联网,是否会自动尝试完成任务,或者会话是否只是返回错误?

4

3 回答 3

4

看起来由你来处理重试。

当任何任务完成时,NSURLSession 对象调用代理的 URLSession:task:didCompleteWithError: 方法,带有一个错误对象,如果任务成功完成,则为 nil。如果任务是可恢复的下载任务,则 NSError 对象的 userInfo 字典包含 NSURLSessionDownloadTaskResumeData 键的值。您的应用应使用可达性 API 来确定何时重试,然后应调用 downloadTaskWithResumeData: 或 downloadTaskWithResumeData:completionHandler: 来创建新的下载任务以继续下载。转到步骤 3(创建和恢复任务对象)。

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

于 2013-10-08T09:17:28.193 回答
3

如果 Internet 连接丢失,NSURLSession 的数据任务是否会在后台自动恢复?

如果 Internet 连接丢失,您将在委托方法中收到错误NSURLErrorNetworkConnectionLost(错误代码:-1005)URLSession:task:didCompleteWithError。您负责使用 invalidateAndCancel 或 finishAndInvalidate 重试和/或使会话无效(尽管在网络连接丢失的情况下它已经完成)。

如果最初没有互联网,NSURLSession 会自动尝试完成任务,还是会话只是返回错误?

如果没有互联网连接,您将NSURLErrorNotConnectedToInternet在委托方法中收到错误(错误代码:-1009)URLSession:task:didCompleteWithError。您负责使用 invalidateAndCancel 或 finishAndInvalidate 使会话无效(如果需要)(尽管在没有 Internet 连接的情况下它已经完成)。

参考:

URL 加载系统编程指南

基础常量参考

于 2013-10-17T21:26:51.283 回答
1

如果您将后台配置与 NSURLSession 一起使用,则当您的应用程序处于活动状态或在后台时,代表会在成功/失败时被调用。您创建的任务被移交给操作系统的恶魔,您的应用程序正在被唤醒甚至启动(如果它被 iOS 杀死)使用

`application:handleEventsForBackgroundURLSession:completionHandler`:

当所有任务完成时,您的会话委托将被调用

URLSessionDidFinishEventsForBackgroundURLSession:   

有关后台会话的更多详细信息,请参见此处

您还可以在此处获取苹果示例代码并查找“简单后台传输”

于 2013-10-31T15:43:05.963 回答