我遇到这种情况,当设备收到推送通知时,我会发送一个NSURLSession
与NSURLConnection
相结合。关于NSURLSession
,我有几个问题。
如果互联网连接丢失,NSURLSession's
数据任务是否会在后台自动恢复?
如果最初没有互联网,NSURLSession
是否会自动尝试完成任务,或者会话是否因错误而返回?
答案 0 :(得分:4)
看起来你需要处理重试。
当任何任务完成时,NSURLSession对象会调用委托 URLSession:task:didCompleteWithError:带有错误的方法 object,如果任务成功完成,则为nil。如果任务是 可恢复的下载任务,NSError对象的userInfo字典 包含NSURLSessionDownloadTaskResumeData键的值。您的 应该使用可访问性API来确定何时重试,以及 然后应该调用downloadTaskWithResumeData:或 downloadTaskWithResumeData:completionHandler:创建一个新的下载 任务继续下载。转到第3步(创建并恢复 任务对象)。
答案 1 :(得分:3)
如果互联网连接丢失,NSURLSession的数据任务是否会在后台自动恢复?
如果互联网连接丢失,您将在委托方法NSURLErrorNetworkConnectionLost
中收到错误URLSession:task:didCompleteWithError
(错误代码:-1005)。您负责使用invalidateAndCancel或finishAndInvalidate重试和/或使会话无效(虽然在网络连接丢失的情况下它已经完成)。
如果最初没有互联网,NSURLSession是否会自动尝试完成任务,或者会话是否因错误而返回?
如果没有互联网连接,您将在委托方法NSURLErrorNotConnectedToInternet
中收到错误URLSession:task:didCompleteWithError
(错误代码:-1009)。您有责任使用invalidateAndCancel或finishAndInvalidate使会话无效(如果需要)(虽然在没有互联网连接的情况下它已经完成)。
参考文献:
答案 2 :(得分:1)