swift - 在完成之前中止 Alamofire 下载请求

标签 swift alamofire

我实例化了一个通过 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。

最佳答案

Error -999是系统返回的取消错误。这只是意味着正在进行的 URLSessionTask 在完成之前被取消了。我们在 Alamofire 5 中将其设为显式错误,但它仍被视为错误状态,因此如果您需要单独处理,可以在 response 闭包中进行。

关于swift - 在完成之前中止 Alamofire 下载请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57102566/

相关文章:

swift - 单个 UICollectionView 的多个单元格

json - 从 Swift 对象到 json(格式为 [String : Any]) for alamofire REST post parameter (defined as [String: Any])

ios - 如何使用图表库分离 JSON 数据以唯一显示?

ios - UITableView Cell 中的动态布局

ios - 当我尝试向 TableView 中添加行时出现 NSInternalInconsistencyException 错误

Swift Alamofire 使用 UIWebView 向 VC 请求答案

ios - 与 Alamofire 一起使用时未调用 cellForRowAtIndexPath

json - 将 DataResponse<String> 转换为可用类型

swift - 调用 Swift 时缺少参数 'coder' 的参数

swift - 是否可以在 ScreenSaverView 中使用 SpriteKit