我实例化了一个通过Alamofire下载远程mp3文件的请求。下载完成后,此文件将自动播放。如果用户决定在完成操作前离开屏幕,我试图取消该请求。仅当下载完成时,此方法才有效;如果在下载过程中取消,它将给出-999错误代码。
我已经尝试了有关取消Alamofire请求的所有步骤,但似乎无济于事。
func startDownload(audioUrl: String) -> Void {
audioFileURL = self.getSaveFileUrl(fileName: audioUrl)
let destination: DownloadRequest.DownloadFileDestination = { _, _ in
return (self.audioFileURL!, [.removePreviousFile, .createIntermediateDirectories])
}
self.request = Alamofire.download(audioUrl, to: destination).downloadProgress(closure: {(progress) in
// Download in progress
let roundedNum = progress.fractionCompleted*100
let roundedString = String(format: "%.0f", roundedNum)
self.topLabel.text = "\(roundedString)%"
}).response(completionHandler: {(DefaultDownloadResponse) in
// Download completed
self.topLabel.text = "Now playing"
self.playAudio()
})
}
然后,当用户退出屏幕时,我触发以下内容:
@IBAction func dismissPlayVC(_ sender: Any) {
self.request?.cancel() // Cancelling the download request when exiting PlayVC
player.pause() // Pause player if audio is playing while exiting PlayVC
if let urlString = audioUrlString {
clearDiskCache(audioUrl: urlString)
}
self.dismiss(animated: true, completion: nil)
}
请求在开始时就被实例化,如下所示:
var request: Alamofire.Request?
有什么建议吗?错误代码为-999。
答案 0 :(得分:1)
错误-999
是系统返回的取消错误。这仅意味着正在进行的URLSessionTask
在完成之前已被取消。在Alamofire 5中,我们已将其设为显式错误,但仍被视为错误状态,因此,如果需要单独处理,则可以在response
闭包中进行处理。