скачать файл с urlsession

Я пытаюсь загрузить с помощью фонового сеанса URL-адреса, это моя основная функция.

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()
}

и мой сделал с ошибкой

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 задачи, возобновляет предыдущую и запускает новую. Я хочу просто возобновить предыдущую с данными возобновления. что мне делать, чтобы просто триггер завершился методом ошибки.


person namaama    schedule 30.08.2018    source источник


Ответы (1)


То, что вы видите, является своего рода «ожидаемым», и вы должны разработать свое программное обеспечение, чтобы справиться с этим. На самом деле, есть еще несколько вещей, которые вы должны учитывать. Я исследовал и положил на следующий в качестве ответа. (NSURLSessionDownloadTask переместить временный файл) Также доступен пример проекта.

person beshio    schedule 31.08.2018
comment
Я прочитал ваш ответ, но когда вы говорите, что вы ожидаете, что вы имеете в виду? Должен ли я ожидать, что didCompletedWithError будет активирован при перезапуске приложения? Но это не так, пока я не нажму «Пуск» снова, что совершенно неожиданно, почему ответ от предыдущей задачи должен только создать новую? Мне просто нужен способ получить данные из предыдущей задачи внутри ошибки этой функции, чтобы возобновить загрузку, и все, и я хочу, чтобы это было перезапущено в приложении. - person namaama; 31.08.2018
comment
Я имел в виду, что ваш сценарий может случиться, и вы должны быть к этому готовы. Извините за путаницу. Дело в том, что мы можем дважды получить didCompleteWithError и didFinishDownloadingTo за одно и то же после того, как создадим новую сессию с той же конфигурацией при следующем запуске. Некоторые другие нежелательные сценарии/поведения (iOS) описаны в моем другом ответе . - person beshio; 31.08.2018