NSURLSession dataTaskWithRequest 进度跟踪

Posted

技术标签:

【中文标题】NSURLSession dataTaskWithRequest 进度跟踪【英文标题】:NSURLSession dataTaskWithRequest progress tracking 【发布时间】:2015-05-27 22:27:51 【问题描述】:

我正在使用NSURLSession dataTaskNSOoperationQueue 来下载具有多个连接的文件以获得更快的速度。从NSURLSession 创建操作并将它们传递给OperationQueue。现在我在这里的挣扎是,正如我在苹果文档中看到的那样,只有downloadTask 有进度跟踪,甚至可以跟踪使用NSURLSession dataTask 接收到的字节吗?

【问题讨论】:

【参考方案1】:

根据 Apple 文档 https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSessionTaskDelegate_protocol/index.html#//apple_ref/occ/intfm/NSURLSessionTaskDelegate/URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:代表是

- (void)URLSession:(NSURLSession *)session
          task:(NSURLSessionTask *)task
didSendBodyData:(int64_t)bytesSent
totalBytesSent:(int64_t)totalBytesSent
totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend

URLSession(_:dataTask:didReceiveData:) 没有被调用, 至少不在 ios 9.0 上, 否则 Stefan 的回答适用

【讨论】:

谢谢!对我帮助很大。【参考方案2】:

将您的NSURLSession 配置为具有实现NSURLSessionDataDelegate 协议的委托。

在委托中,实现URLSession(_:dataTask:didReceiveData:) 方法,当数据进入时将被调用。这是一个更新进度条的好地方。

【讨论】:

谢谢@StefanArentz,您能否更深入地解释一下我必须如何创建代理?我知道如何配置 NSURLSession 以使用委托,但我不确定如何创建委托本身。谢谢

以上是关于NSURLSession dataTaskWithRequest 进度跟踪的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发系列-NSURLSession

学习NSURLSession

NSURLSession各文件关系

iOS开发-NSURLSession

NSURLSession学习

iOS开发 GETPOST请求方法:NSURLSession篇