在Swift 3.0中使用URLSessionDownloadTask时,多个下载无法正常工作

时间:2016-12-01 04:07:06

标签: swift swift3 nsurlsessiondownloadtask

我正在尝试使用会话下载任务下载多个文件,并且会发生以下情况:

  1. 首次下载开始。我想它会创建一个临时文件,例如CFNetworkDownload_Kx54Ke.tmp。

  2. 我的第二次下载开始后不久,顺便使用相同的会话对象,但使用不同的downloadtask对象。

  3. 我看到我的第一次下载停止并出现以下错误错误:

    __ NSCFLocalDownloadFile:错误2打开ioChannel,文件:/private/var/mobile/Containers/Data/Application/E88FD72B-AB73-402E-B264-D5827BA2023C/tmp/CFNetworkDownload_Kx54Ke.tmp

  4. 我的第二次下载完成后没有任何问题。

  5. 我的会话代码。我只是将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是否预期会出现这种情况。

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。这是我的一个愚蠢的错误。我正在清除每个下载调用的临时目录。首先下载清除临时目录并创建临时文件。第二次下载调用将清除临时目录,包括首次下载的临时文件。

我必须将明确临时目录调用移动到只调用一次的位置。