2016-07-20 19 views
1

ich ein Bild mit diesem Stück Code hochladen:Erhalten Fortschritt von Facebook SDK GraphRequest mit schnellen

FBSDKGraphRequest(graphPath: "me/photos", parameters: params as [NSObject : AnyObject], HTTPMethod: "POST").startWithCompletionHandler({ (connection, result, error) -> Void in 

     if (error != nil) { 
      print ("failed") 
     } 
     else { 
      print ("success") 
     } 

    }) 

Es funktioniert so weit in Ordnung, aber der Upload kann eine Weile dauern, und ich möchte den Benutzer über das informieren, laufender Fortschritt. Gibt es eine Möglichkeit, den aktuellen Fortschritt zu erreichen? Wie ich in den SDK-Dokumenten sehen kann, gibt es eine FBSDKGraphRequestConnection, die eine FBSDKGraphRequestConnectionDelegate mit Fortschritt Zeug in requestConnection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite: bietet, aber ich bin nicht in der Lage zu verstehen, wie dieses Zeug in meinem kleinen Stück Code zu implementieren. Kann jemand helfen?

Antwort

1

Ich jemand anderes hat das gleiche Problem ... Google findet nichts in swift geschrieben. Heres meine Arbeitslösung:

1) Leiten Sie Ihre Klasse von NSObject und FBSDKGraphRequestConnectionDelegate

2) Schreiben Sie eine Upload-Prozess wie folgt aus:

let uploadRequest = FBSDKGraphRequest(graphPath: "me/photos", parameters: params as [NSObject : AnyObject], HTTPMethod: "POST") 
    let connection = FBSDKGraphRequestConnection() 
    connection.delegate = self 
    connection.addRequest(uploadRequest, completionHandler: { 
     (connection, result, error) -> Void in 

     if (error != nil) { 
      // error handling 
     } 
     else { 
      // success handling 
     } 
    }) 
    connection.start() 

3) Implementieren Sie die Delegierten in der Klasse wie folgt aus :

func requestConnection(connection:FBSDKGraphRequestConnection, didSendBodyData bytesWritten:NSInteger, totalBytesWritten:NSInteger, totalBytesExpectedToWrite:NSInteger) { 
    print("upload percent reached: " + String(Double(totalBytesWritten)/Double(totalBytesExpectedToWrite))) 

    // handle your UI here to show the current status 
}