2017-05-30 1 views
0
だから、私は、進行状況ビューのビデオをダウンロードして、進捗状況は、このコード今

NSURLSessionは、すべてのビューコントローラにダウンロードの進行状況を取得

func startDownloading() { 
    let download = Downloads(url: videoUrl!.absoluteString!) 
    download.downloadTask = self.downloadsSession.downloadTaskWithURL(videoUrl!)      
    download.downloadTask!.resume() 
    download.isDownloading = true 

} 

func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) { 
    // 1 
    print("URLSession Completed for url \(downloadTask.originalRequest?.URL?.absoluteString)") 

    if let originalURL = downloadTask.originalRequest?.URL?.absoluteString, 
     destinationURL = localFilePathForUrl(originalURL) { 

     let fileManager = NSFileManager.defaultManager() 
     do { 
      try fileManager.removeItemAtURL(destinationURL) 
     } catch { 
      // Non-fatal: file probably doesn't exist 
     } 
     do { 
      try! fileManager.copyItemAtURL(location, toURL: destinationURL) 
     } catch let error as NSError { 
      print("Could not copy file to disk: \(error.localizedDescription)") 
     } 
    } 
} 

func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) { 

    print("URLSession inProgress \(Float(totalBytesWritten)/Float(totalBytesExpectedToWrite))") 


    if let downloadUrl = downloadTask.originalRequest?.URL?.absoluteString, 
     let download = activeDownloads[downloadUrl] { 
     //THIS SETS THE PROGRESS 
     download.progress = Float(totalBytesWritten)/Float(totalBytesExpectedToWrite) 


     self.downloadView.state = .Downloading 
      self.downloadView.setProgress(Double(totalSize)!, animated: true)  

    } 
} 

このコードの更新FirstViewControllers downloadView.progressを使用して正常に動作しているFirstViewControllerを持って

正しくは、私が望むのは私がに行くときです。SecondViewController私はSecondVCでこの進行中のダウンロードの進捗状況をもう一度ダウンロードの進行を開始せずに取得する必要があります(私は再びダウンロードが非常にダムになることを知っています)。

答えて

0

最良の方法は、ビューコントローラからネットワーク要求マネージャコードを分離することです:

  • 要求を管理するために別のクラスを作成し、そこにあなたのデリゲートコードを移動します。
  • didWriteDataメソッドでは、NSNotificationCenterを使用して、関心のあるビュークラスに通知をブロードキャストするか、または最初のビューコントローラが2番目のビューコントローラを通知するようにします。
  • 各View Controllerクラスで、通知を登録し、通知を受け取ったらそれに応じてステータスを更新します。
+0

私は同じことを考えていましたが、それを使用している人はいませんでした。それは可能な限り最良の方法だと思いますか? – TestDjay

関連する問題