2017-05-30 7 views
0

donc j'ai un FirstViewController où je télécharger une vidéo en vue de progrès et de progrès fonctionne bien en utilisant ce codeobtenir NSURLSession télécharger des progrès dans tous vue contrôleurs

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)  

    } 
} 

maintenant cette mise à jour du code FirstViewControllers downloadView.progress correctement mais ce que je veux est quand je vais à SecondViewController je devrais obtenir la progression de ce téléchargement continu dans SecondVC aussi sans commencer la progression de téléchargement encore (je sais que le téléchargement serait très stupide).

Répondre

0

La meilleure façon est de séparer votre code de gestionnaire de requêtes réseau du contrôleur de vue:

  • Créer une classe distincte pour gérer les demandes, et aller là-bas votre code délégué.
  • Dans la méthode didWriteData, utilisez NSNotificationCenter pour diffuser la notification à toute classe d'affichage intéressée ou faites en sorte que votre contrôleur de première vue notifie le second si celui-ci existe.
  • Dans chacune de vos classes de contrôleurs de vue, enregistrez-vous pour la notification et lorsque vous la recevez, mettez à jour le statut en conséquence.
+0

Je pensais à la même chose mais je ne trouvais personne qui l'utilisait, pensez-vous que c'est la meilleure façon possible? – TestDjay