2015-01-13 6 views
8

Ich habe gesucht, habe aber keine relevante Antwort nur in Ziel C gefunden. Gibt es eine Möglichkeit, den Fortschritt des Downloads einer Datei in Swift zu finden, so dass es zu zeigen zum Benutzer? Ich bin neu in iOS Programmierung und habe es mit NSURLSession versucht, aber ohne Erfolg.Finden Sie den Download-Fortschritt einer Datei in swift

EDIT: ich diese Methode verwendet haben, wie in this Post gesehen, aber ich kann nicht scheinen zu verstehen, wie man den Fortschritt Status erhalten:

func downloadFile(page: NSString){ 
    finished = false 
    var statusCode:Int = 0 
    println("Download starting") 
    let url = NSURL(string: page) 

    let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in 

     if error != nil { 
      println("download failed with error \(error?.localizedDescription)") 
     } else { 
      println("Expected Content-Length \(response.expectedContentLength)") 
      self.contentLength = response.expectedContentLength 
      if let httpResponse = response as? NSHTTPURLResponse { 
       println("Status Code of number \(self.countDownload) is \(httpResponse.statusCode)") 
       statusCode = httpResponse.statusCode 
      } 
     } 
    } 
    task.resume() 
} 

Vielen Dank im Voraus

+2

Wie hast du das mit 'NSURLSession' versucht und was hat es falsch gemacht? – Wain

+0

Zeigen Sie uns, was Sie versucht haben – ColdSteel

Antwort

4

Sie Angenommen laden eine Datei, es gibt eine Unterklasse von NSURLSessionTask für die gerade, die NSURLSessionDownloadTask genannt wird. Im Folgenden finden Sie einen Auszug aus der NSURLSession-Dokumentation zu einer bestimmten Funktion:

Informiert den Delegierten regelmäßig über den Fortschritt des Downloads.

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

Zum Beispiel könnten Sie die Ausgabe der Fortschritt auf der Konsole, indem Sie:

println("\(totalBytesWritten)/\(totalBytesExpectedToWrite)") 
+0

Ich glaube, das funktioniert nur, wenn Sie die Delegate-Methoden und nicht eine Schließung verwenden. – dar512

+0

@ dar512 Das stimmt. Ich sollte beachten, ich glaube nicht, dass es einen Weg gibt, den Fortschritt zu finden, wenn Sie eine Schließung verwenden. – Jeffrey

11

Der Fortschritt-Status kann in

URLSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:) 

berechnet werden Dies ist eine eine von drei erforderliche Methoden des Protokolls NSURLSessionDownloadDelegate. In meinem Fall sieht der Code der Methode wie folgt:

func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) { 
    // println("download task did write data") 

    let progress = Float(totalBytesWritten)/Float(totalBytesExpectedToWrite) 

    dispatch_async(dispatch_get_main_queue()) { 
     self.progressDownloadIndicator.progress = progress 
    } 
} 

ich ein kleines Projekt erstellt haben, die drei verschiedene Ansätze implementiert:

  • herunterladen synchron
  • herunterladen asynchron
  • herunterladen mit Fortschritt

Überprüfen Sie es: http://goo.gl/veRkA7

Verwandte Themen