在 Swift 3.0 中使用 URLSessionDownloadTask 时,多个下载不起作用
Multilple Downloads not working while using URLSessionDownloadTask in Swift 3.0
我正在尝试使用会话下载任务下载多个文件并发生以下情况:
第一次下载开始。我猜它会创建一个临时文件,例如 CFNetworkDownload_Kx54Ke.tmp.
第二次下载开始后不久,顺便说一句,它使用了相同的会话对象,但使用了不同的下载任务对象。
我看到我的第一个下载停止并出现以下错误:
__NSCFLocalDownloadFile:打开 ioChannel 错误 2,文件:/private/var/mobile/Containers/Data/Application/E88FD72B-AB73-402E-B264-D5827BA2023C/tmp/CFNetworkDownload_Kx54Ke.tmp
然而,我的第二次下载没有出现任何问题。
我的会话代码。我只是将 URL 传递给此方法,并且会话在应用程序的生命周期中仅创建一次:
//creating session only once in the app life cycle
init() {
super.init()
let configuration = URLSessionConfiguration.default
self.session = URLSession(configuration: configuration, delegate: self, delegateQueue: nil)
}
//calling download method from my viewcontroller
func download(url : URL ){
let request = URLRequest(url: url)
let downloadTask : URLSessionDownloadTask
downloadTask = self.session!.downloadTask(with: request)
downloadTask.resume()
}
更新:
在操作队列块中调用每个不同的下载操作有效,我可以看到下载是并行的。但是,我仍然想确认在 urlsessiondownload 任务中 Swift 3 是否会出现这种行为。
我发现了问题。这对我来说是一个愚蠢的错误。我在每次下载调用时都清除了临时目录。首先下载清除临时目录并创建一个临时文件。第二次下载调用清除临时目录,包括第一次下载的临时文件。
我不得不将清除临时目录调用移动到只调用一次的位置。
我正在尝试使用会话下载任务下载多个文件并发生以下情况:
第一次下载开始。我猜它会创建一个临时文件,例如 CFNetworkDownload_Kx54Ke.tmp.
第二次下载开始后不久,顺便说一句,它使用了相同的会话对象,但使用了不同的下载任务对象。
我看到我的第一个下载停止并出现以下错误:
__NSCFLocalDownloadFile:打开 ioChannel 错误 2,文件:/private/var/mobile/Containers/Data/Application/E88FD72B-AB73-402E-B264-D5827BA2023C/tmp/CFNetworkDownload_Kx54Ke.tmp
然而,我的第二次下载没有出现任何问题。
我的会话代码。我只是将 URL 传递给此方法,并且会话在应用程序的生命周期中仅创建一次:
//creating session only once in the app life cycle
init() {
super.init()
let configuration = URLSessionConfiguration.default
self.session = URLSession(configuration: configuration, delegate: self, delegateQueue: nil)
}
//calling download method from my viewcontroller
func download(url : URL ){
let request = URLRequest(url: url)
let downloadTask : URLSessionDownloadTask
downloadTask = self.session!.downloadTask(with: request)
downloadTask.resume()
}
更新: 在操作队列块中调用每个不同的下载操作有效,我可以看到下载是并行的。但是,我仍然想确认在 urlsessiondownload 任务中 Swift 3 是否会出现这种行为。
我发现了问题。这对我来说是一个愚蠢的错误。我在每次下载调用时都清除了临时目录。首先下载清除临时目录并创建一个临时文件。第二次下载调用清除临时目录,包括第一次下载的临时文件。
我不得不将清除临时目录调用移动到只调用一次的位置。