`urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:)` 在下载内容时只调用一次使用

Posted

技术标签:

【中文标题】`urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:)` 在下载内容时只调用一次使用 Alamofire【英文标题】:`urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:)` is called only once when downloading something use Alamofire 【发布时间】:2019-05-20 12:37:16 【问题描述】:

我使用alamofire实现下载功能。下载进度总是0,下载完成后变成1。所以我调试代码,我发现SessionDelegate(跟随UR​​LSessionDownloadDelegate)的函数urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:)只在下载完成时调用了一次。不知道为什么,谁能告诉我?

我在iphoneXr(ios 12.2)、iphoneXs(iOS 12.2)、模拟器iphone7(iOS 12.1)中试过,这些设备都有这个现象。模拟器iphoneX(iOS 12.2)正常,调用函数正确。

【问题讨论】:

【参考方案1】:

除非服务器以Content-Length 标头响应,否则URLSession(因此Alamofire)无法计算下载进度,因此只会在完成后更新。此外,如果下载量很小且下载速度很快,您可能看不到任何进度更新。

【讨论】:

以上是关于`urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:)` 在下载内容时只调用一次使用的主要内容,如果未能解决你的问题,请参考以下文章

未调用 URLSession 委托成功方法,但没有错误

如何在 Swift 中使用 URLSession 缓存图像

我需要将 urlsession 数据任务放在另一个 DispatchQueue 上还是自动完成?

Swift:使用 URLSession 的“表达式类型不明确,没有更多上下文”

swift URLSessionの拡张(URLSession#synchronousDataTask,URLSession #retryDataTask)ref:http://qiita.com/to

Swift UrlSession 在 UrlSession 中不起作用