現在、ダウンロードタスクを使用しているときにユーザーインターフェイスのアップデートに問題があります。次の関数はユーザーインターフェイスを更新する必要がありますが、ときどき動作します。なぜ私はファイルをダウンロードするたびに動作しませんか?毎回NSLog
のログがデバッガに表示されます。urlSessionのUIアップデートが動作しませんdownloadTask didWriteData
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)
}
}
のような二ディスパッチキューを使用して読んこれもただ時々働いています。
そのメソッド内でDispatchQueueを使用する必要はありません。 –
これは、DispatchQueueと同じくらい頻繁には機能しないという点を除いて、同じ結果を前に試しました。 – who9vy
複数のダウンロードを同時に行っていますか?ラベルは1つだけです。新しいセッションを開始する前に、以前のセッションタスクをキャンセルしてください。 –