- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前,我在使用下载任务时遇到了用户界面更新问题。以下函数应该更新用户界面,但它有时会起作用。为什么每次下载文件时都不起作用?每次调试器中都会显示 NSLog
的日志!
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
let curDownloadSize = totalBytesWritten / (1024*1024)
let totalDownloadSize = totalBytesExpectedToWrite / (1024*1024)
if curDownloadSize != oldDownloadSize {
DispatchQueue.main.async {
self.progressLabel!.text = "\(self.curDownloadSize)MB / \(self.totalDownloadSize)MB"
self.progressView!.progress = Float(totalBytesWritten) / Float(totalBytesExpectedToWrite)
NSLog("Download progress: \(Float(totalBytesWritten) / Float(totalBytesExpectedToWrite))");
}
}
}
progressLabel
和 progressView
此时均可用。
顺便说一句,我已经用同一个文件多次测试过,有时有效,有时无效。
更新:我读到了有关使用第二个这样的调度队列的内容
DispatchQueue.global(qos: .utility).async {
DispatchQueue.main.async {
(same as above)
}
}
但这有时也有效。
最佳答案
最近,我解决了这个问题。
如果将太多事件推送到主队列,就会出现此问题。它只是在互联网连接非常好的情况下发生的。在这种情况下,回调被调用得太频繁。
我的解决方案:
progressCounter += 1
if progressCounter % 30 == 0 {
DispatchQueue.main.async {
self.progressLabel!.text = "\(self.curDownloadSize)MB / \(self.totalDownloadSize)MB"
self.progressView!.progress = Float(totalBytesWritten) / Float(totalBytesExpectedToWrite)
NSLog("Download progress: \(Float(totalBytesWritten) / Float(totalBytesExpectedToWrite))");
}
}
progressCounter
之前已初始化为 0。
关于swift - UI 更新不适用于 urlSession downloadTask didWriteData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46999818/
我开始使用 NSURLSession 实现下载方法,并成功地从多个请求中下载了不同的文件。但是现在我想添加一个进度轨道,但是没有触发下载进度的代表。 这是我的代码: NSURLSessionConfi
在我的应用程序中,我想下载大文件。因此,我想向用户显示下载进度。为此,我实现了 URLSessionDownloadDelegate。 在应用程序进入后台之前,这非常有用。当用户随后重新打开应用程序时
目前,我在使用下载任务时遇到了用户界面更新问题。以下函数应该更新用户界面,但它有时会起作用。为什么每次下载文件时都不起作用?每次调试器中都会显示 NSLog 的日志! func urlSession(
我想实现下载功能,可以用百分比显示下载任务的完成状态。我能够做到这一点,但问题是当应用程序移动到后台并回到前台时,委托(delegate)方法 didWriteData 未在 iOS12。谁能帮帮我吗
我是一名优秀的程序员,十分优秀!