最初,我认为如果NSURLSessionDownloadTask
成功完成,则会调用URLSession:downloadTask:didFinishDownloadingToURL:
方法,如果由于某种原因失败,则会调用URLSession:task:didCompleteWithError:
。
它可以在模拟器上按预期方式工作(一个下载任务仅调用此方法之一),但在设备上则并非如此:万一失败,这两个方法都将被调用,URLSession:downloadTask:didFinishDownloadingToURL:
是第一个方法。 (这两种方法都在参数中传递相同的任务)
有什么我想念的吗?
最佳答案
我找到了解决此问题的方法:
要在响应 header 中获取状态代码,必须首先启动 NSURLSessionDataTask 。
这将调用以下委托(delegate)方法 URLSession:dataTask:didReceiveResponse:completionHandler:。
在此方法中,您可以首先检查NSURLResponse参数的状态码(通过将其转换为NSHTTPURLResponse),最后使用 NSURLSessionResponseBecomeDownload 调用完成处理程序,以将dataTask转换为downloadTask(其行为与您期望的一样) NSURLSessionDownloadTask)或 NSURLSessionResponseCancel 以避免下载一些不需要的数据(例如,响应的状态码为404)。
另外,如果您需要对转换后的NSURLSessionDownloadTask做一些事情(例如将其存储在数组或字典中,或者将数据任务替换为新对象),则可以在 URLSession:dataTask:didBecomeDownloadTask:中完成
希望这对某人有帮助!
关于ios - 处理NSURLSessionDownloadTask失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23514109/