gpt4 book ai didi

ios - 取消一个带有特定 url 的 Alamofire 下载请求

转载 作者:行者123 更新时间:2023-11-28 09:51:03 24 4
gpt4 key购买 nike

我有为每个单元格下载视频文件的表格 View 。这是我下载视频文件的代码。

 func beginItemDownload(id:String,url:String,selectRow:Int) {

let pathComponent = "pack\(self.packID)-\(selectRow + 1).mp4"

let destination: DownloadRequest.DownloadFileDestination = { _, _ in
let directoryURL: URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let folderPath: URL = directoryURL.appendingPathComponent("Downloads", isDirectory: true)
let fileURL: URL = folderPath.appendingPathComponent(pathComponent)
return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
}
let url = URL(string:url)

Alamofire.download(
url!,
method: .get,
parameters: nil,
encoding: JSONEncoding.default,
headers: nil,
to: destination).downloadProgress(closure: { (progress) in
DispatchQueue.main.async {

if progress.fractionCompleted < 1 {

print(Float(progress.fractionCompleted))

}

if progress.fractionCompleted == 1 {
print("Completed")
}
}

}).response(completionHandler: { (defaultDownloadResponse) in

if let destinationUrl = defaultDownloadResponse.destinationURL {
DispatchQueue.main.async {

print("destination url -****",destinationUrl.absoluteString)

}
}
if let error = defaultDownloadResponse.error {
debugPrint("Download Failed with error - \(error)")
return
}
})
}

当点击每个表格 View 单元格的下载按钮时,我可以下载视频文件并为每个单元格分配进度值。但是现在我想在点击每个单元格中的取消按钮时取消对该单元格的下载请求,。我针对此问题搜索了不同的解决方案,但找不到任何用于取消具有特定 url 字符串的请求的解决方案。如何解决这个问题。感谢大家的回复。

最佳答案

未测试但应该有效,使用originalRequest(创建任务时的原始请求)或可选的currentRequest(当前正在处理的请求)来找到您要取消的特定任务:

func cancelSpecificTask(byUrl url:URL) {
Alamofire.SessionManager.default.session.getAllTasks{sessionTasks in
for task in sessionTasks {
if task.originalRequest?.url == url {
task.cancel()
}
}

}
}

或者只取消下载任务:

func cancelSepcificDownloadTask(byUrl url:URL) {
let sessionManager = Alamofire.SessionManager.default
sessionManager.session.getTasksWithCompletionHandler { dataTasks, uploadTasks, downloadTasks in
for task in downloadTasks {
if task.originalRequest?.url == url {
task.cancel()
}
}
}

关于ios - 取消一个带有特定 url 的 Alamofire 下载请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47958635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com