В настоящее время у меня возникла проблема с обновлением пользовательского интерфейса при использовании задачи загрузки. Следующая функция должна обновлять пользовательский интерфейс, но она работает только иногда. Почему это не работает каждый раз, когда я загружаю файл? Журнал 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)
}
}
но это также работает только иногда.