【问题标题】:Resume Data from URLSessionDownloadTask Always nil从 URLSessionDownloadTask 恢复数据 始终为零
【发布时间】:2016-11-13 10:01:41
【问题描述】:

我有一个应用程序,当我下载文件时,我需要从互联网下载文件,但我的问题是当我按下暂停按钮以暂停下载一分钟或更长时间时,我从恢复数据中得到零

下面是我的代码:

@IBAction func startDownloading(_ sender: UIButton)
{     
    isDownload = true
    sessionConfig = URLSessionConfiguration.default
    let operationQueue = OperationQueue.main
    session = URLSession.init(configuration: sessionConfig, delegate: self, delegateQueue: operationQueue)
    let url = URL(string: "www.example.com")
    downloadTask = session.downloadTask(with: url!)
    downloadTask.resume()
}
@IBAction func pause(_ sender: UIButton) 
{
    if downloadTask != nil && isDownload 
    {
        self.downloadTask!.cancel(byProducingResumeData: { (resumeData) in
                        // here is the nil from the resume data
                    })
        isDownload = false
        downloadTask = nil
        pasueBtnOutlet.setTitle("Resume", for: .normal)
    }
    if !isDownload && downloadData != nil 
    {
        downloadTask = session.downloadTask(withResumeData: downloadData as Data)
        downloadTask.resume()
        isDownload = true
        downloadData = nil
        pasueBtnOutlet.setTitle("Pause", for: .normal)
    }                    
}

请帮帮我

谢谢大家

【问题讨论】:

标签: swift3 nsurlsessiondownloadtask


【解决方案1】:

您的代码似乎是正确的,您只需要在关闭时使用resumeData 来初始化downloadData

创建downloadData的属性

var downloadData:Data!

然后在取消任务的暂停按钮操作中,将downloadData 设置为resumeData

self.downloadTask!.cancel(byProducingResumeData: { (resumeData) in
        // here is the nil from the resume data

        // You have to set download data with resume data
        self.downloadData = resumeData
})

为了检查进度和完成情况,请实现这些URLSessionDownloadDelegate 代表

func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
    let progress = Float(totalBytesWritten) / Float(totalBytesExpectedToWrite)
    print(Int(progress * 100))

}

func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
    print("Downloading done")
}

注意:- 尝试一个有效的可下载网址。例如 http://www.star.uclan.ac.uk/news_and_events/news/2010020901/sdo_resolution_comparison.png

它的http,一定要在Info.plist中设置Transport Security

【讨论】:

  • 问题是 resumeData 是关闭的 nil 你可以试试这个,你会看到它是 nil 我认为苹果有问题
  • 你的网址应该是有效的下载
  • 你的下载地址是什么?
  • 请先给出网址
  • @HaiderAhmed 你检查过浏览器上的网址是播放歌曲还是下载歌曲吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
  • 2012-01-16
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多