首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理NSURLSessionDownloadTask故障

处理NSURLSessionDownloadTask故障
EN

Stack Overflow用户
提问于 2014-05-07 17:37:16
回答 5查看 3K关注 0票数 8

最初,我认为如果NSURLSessionDownloadTask成功完成,URLSession:downloadTask:didFinishDownloadingToURL:方法将被调用,如果它由于某种原因失败- URLSession:task:didCompleteWithError:。它在模拟器上按预期工作(一个下载任务只调用其中一个方法),但在设备上情况并非如此:在失败的情况下,这两个方法都被调用,URLSession:downloadTask:didFinishDownloadingToURL:是第一个。(这两个方法在参数中传递相同的任务)

我是不是漏掉了什么?

EN

回答 5

Stack Overflow用户

发布于 2017-08-04 01:49:09

我找到了这个问题的解决方案:

要获取响应头中的状态代码,必须首先启动一个NSURLSessionDataTask.

这将调用以下委托方法URLSession:dataTask:didReceiveResponse:completionHandler:.

在此方法中,您可以首先检查NSURLResponse参数的状态代码(通过将其转换为NSHTTPURLResponse),最后使用NSURLSessionResponseBecomeDownloadNSURLSessionResponseCancel调用完成处理程序,以将dataTask转换为downloadTask (其行为将与您从NSURLSessionDownloadTask预期的行为相同),以避免下载一些不需要的数据(例如,如果响应的状态代码为404)。

此外,如果需要对转换后的NSURLSessionDownloadTask执行某些操作(如将其存储在数组或字典中,或者用新对象替换数据任务),则可以在do中完成

希望这对某些人有帮助!

票数 3
EN

Stack Overflow用户

发布于 2016-09-08 16:36:11

根据苹果在NSURLSessionDownloadDelegate下的文档,这是标准行为。

代码语言:javascript
复制
/* Sent when a download task that has completed a download.  The delegate should 
 * copy or move the file at the given location to a new location as it will be
 * removed when the delegate message returns. URLSession:task:didCompleteWithError: 
 * will still be called. */
票数 2
EN

Stack Overflow用户

发布于 2018-10-12 19:52:13

如果您正在进行HTTP请求,您可以将任务的响应转换为NSHTTPURLResponse,以获取HTTP状态码:

-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL )location { NSLog(@"response is %d\n" ((NSHTTPURLResponse)downloadTask.response).statusCode); NSLog(@"error is %@\n", [downloadTask.error localizedDescription]); }

苹果的逻辑是,当你得到404的时候,错误仍然是空的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23514109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档