【问题标题】:download file with urlsesssion使用 urlsession 下载文件
【发布时间】:2019-02-05 19:55:47
【问题描述】:

我正在尝试使用 urlsession 后台会话下载这是我的主要功能

func startfresh()  {
     session = URLSession(configuration: config, delegate: self, delegateQueue: OperationQueue())
    let url = URL(string: "https://nava.ir/wp-content/uploads/2018/08/Gholamreza-Sanatgar-Dorooghe-Sefid-128.mp3")
     task = session.downloadTask(with: url!)
    task.resume()
}

还有我的 didcompletewitherror

func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
    if error != nil {
    let err = error as NSError?
        let resumeData = err?.userInfo[NSURLSessionDownloadTaskResumeData] as? Data
        print("anotherone")
        let newtask = session.downloadTask(withResumeData: resumeData!)
        newtask.resume()
    }
    else {
        print("hichi")
    }


}

但是当我在下载仍在进行时关闭应用程序并再次重新启动并按开始下载它会启动 2 个任务恢复上一个任务并开始一个新任务我只想用恢复数据恢复上一个任务我应该怎么做do to just trigger did complete with error 方法。

【问题讨论】:

    标签: ios swift nsurlsession nsurlsessiondownloadtask


    【解决方案1】:

    您所看到的有点“预期”,您必须设计您的软件来处理它。实际上,还有一些事情你应该考虑。我已经调查并在下一个作为答案。 (NSURLSessionDownloadTask move temporary file) 还提供了一个示例项目。

    【讨论】:

    • 我读了你的回答,但是当你说有点期待你是什么意思?我不应该期望在应用程序重新启动时激活 didCompletedWithError 吗?但除非我再次点击开始,否则这是非常出乎意料的,为什么从 previos 任务的响应只能创建一个新任务?我只是想要一种从previos任务中获取我的resumeData的方法,这个函数的错误只是为了恢复下载,就是这样,我希望它在应用程序重新启动时使用
    • 我的意思是“你的情况可能会发生,你必须做好准备”。对困惑感到抱歉。关键是,在下次启动时创建具有相同配置的新会话后,我们可能会收到两次 didCompleteWithError 和 didFinishDownloadingTo 。我的其他 answer 中描述了一些其他不需要的场景/行为(iOS)。
    猜你喜欢
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多