Задание «Приостановить и возобновить» при одновременной загрузке нескольких файлов - PullRequest
0 голосов
/ 19 февраля 2019

Мое приложение выглядит следующим образом. Изображение приложения У меня есть таблица с песнями, и я могу загрузить их, а также приостановить их и возобновить. Но у меня проблема с приостановкой и возобновлением.Например, я щелкаю для загрузки Track01 и приостанавливаю загрузку на 10%.Затем я нажимаю на скачивание Track02 и приостанавливаю скачивание на 30%.И теперь я нажимаю возобновить загрузку Track01, и он возобновляет с 30%, но не с 10%.Задача для Track02 заменяет задачу для Track01.Как сделать отдельное задание для каждого трека?Мой код загрузки выглядит следующим образом

class DownloadTracks: NSObject,URLSessionDownloadDelegate, URLSessionTaskDelegate, URLSessionDelegate  {

var task : URLSessionDownloadTask!
let configuration = URLSessionConfiguration.default
let operationQueue = OperationQueue.main
var session : URLSession!
var downloadTaskID : Int!
var progress : Float = 0.0


func downloadTask(url : URL) {
    session = URLSession.init(configuration: configuration, delegate: self, delegateQueue: operationQueue)
    task = session.downloadTask(with: url)
    task.resume()

    print("go download")
}

func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
    print("1111")
}
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
    let documentaryDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    let destenationURL = documentaryDirectoryURL.appendingPathComponent(downloadTask.description + ".mp3")
    print(destenationURL)

    do {
        try FileManager.default.moveItem(at: location, to: destenationURL)

    }
    catch let error as NSError {
        print(error.localizedDescription)
    }

}

func pauseDownload() {

    task.suspend()

}

func resumeDownload() {

    task.resume()
}

func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
    progress = Float (totalBytesWritten) / Float(totalBytesExpectedToWrite)
    print(progress)
} 
}
...