【问题标题】:How to get the downloaded data of a failed NSURLSessionDownloadTask?如何获取失败的 NSURLSessionDownloadTask 的下载数据?
【发布时间】:2014-12-10 08:20:23
【问题描述】:

我想知道我是否可以检索失败的 NSURLSessionDownloadTask 的部分下载数据。

我的用例是:

  1. 我开始下载一个 1024MB 的文件
  2. 已下载 512MB
  3. 网络中断导致下载失败
  4. 下载失败时,delagte的-(void)URLSession:(NSURLSession *)session 任务:(NSURLSessionTask *)任务didCompleteWithError:(NSError *)错误 叫做。但错误对象不包含指向 下载数据的 512MB 文件。

我的问题是:是否可以通过 后台会话 使用 NSURLSession API 检索下载的 512MB?

谢谢,

【问题讨论】:

  • 看起来不像。您可能应该编写自己的版本;不会很难。
  • 编写自己的版本是什么意思?我应该创建一个 NSURLSessionDownloadTask 的子类吗?
  • 不行,使用 iOS 框架网络类,或者 AFNetworking 等,创建一个类来为你下载。
  • 但我需要利用 NSURLSession 后台模式,以便在应用程序处于后台时保持下载运行。据我所知,AFNetworking 不支持后台 nsurlsession
  • 啊好的;那你就不能自己写了。

标签: ios nsurlsession resume nsurlsessiondownloadtask


【解决方案1】:

Apple 文档状态:

如果传输失败,会话对象会向您的委托或任务的完成处理程序提供一个 NSError 对象。在该对象中,userInfo 字典中的 NSURLSessionDownloadTaskResumeData 键包含一个 resumeData 对象。

来源:https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSession_class/#//apple_ref/occ/instm/NSURLSession/downloadTaskWithResumeData

【讨论】:

    【解决方案2】:

    除了已经发布的答案(并对其进行了扩展),您还可以通过error 对象本身访问已下载的数据,如下所示:

    NSData* resume_data = error.userInfo[NSURLSessionDownloadTaskResumeData];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多