2017-01-03 2 views
0

Ich bin wirklich neu in IOS und ich habe gerade begonnen, den API-Graph von Facebook zu verwenden.IOS Importfehler

Jetzt mag ich die "/ me" Abfrage zu tun, aber ich habe diesen Fehler:

Use of unresolved identifier 'GraphRequest'

Dies ist mein Code:

import UIKit 
import FBSDKCoreKit 
import FBSDKLoginKit 
.... 
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) { 

if ((error) != nil) 
{ 
    // Process error 
} 
else if result.isCancelled { 
    // Handle cancellations 
} 
else { 
    if result.grantedPermissions.contains("public_profile") && result.grantedPermissions.contains("user_friends") && result.grantedPermissions.contains("user_posts") && result.grantedPermissions.contains("user_photos") 
    { 
     //HERE IS MY QUERY 

     let params = ["fields" : "email, name"] 
     let graphRequest = GraphRequest(graphPath: "me", parameters: params) <-- HERE I GOT THE ERROR 
     graphRequest.start { 
      (urlResponse, requestResult) in 

      switch requestResult { 
      case .failed(let error): 
       print("error in graph request:", error) 
       break 
      case .success(let graphResponse): 
       if let responseDictionary = graphResponse.dictionaryValue { 
        print(responseDictionary) 

        print(responseDictionary["name"]) 
        print(responseDictionary["email"]) 
       } 
      } 
     } 


       guard let presentedController = self.storyboard?.instantiateViewController(withIdentifier: "01") else { return } 
       presentedController.modalTransitionStyle = UIModalTransitionStyle.partialCurl 
       self.present(presentedController, animated: true, completion: nil) 
      } 
     } 


     guard let presentedController = self.storyboard?.instantiateViewController(withIdentifier: "01") else { return } 
     presentedController.modalTransitionStyle = UIModalTransitionStyle.partialCurl 
     self.present(presentedController, animated: true, completion: nil)*/ 
    }else{ 
     //cambia stato bottone 
     let alert = UIAlertController(title: "Missing Permission", message: "We need all the permission for continue", preferredStyle: UIAlertControllerStyle.alert) 
     alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: nil)) 
     self.present(alert, animated: true, completion: nil) 
    } 
} 
} 

Ich habe den Import und die FB Anmeldung gute Arbeit . Was habe ich falsch gemacht? (Ich verwende Swift 3)

Update 2:

error

Antwort

1

GraphRequest statt FBSDKGraphRequest sein sollte.

let graphRequest = FBSDKGraphRequest(graphPath: "me", parameters: params) 

Hinweis: Neben dem iOS SDK gibt es auch einen Swift spezifischer SDK. https://developers.facebook.com/docs/swift

EDIT:

auf Ihre Frage aktualisiert Basierend scheint es, dass FBSDKGraphRequest eine optionale zurückkehren kann. Ein Optional bedeutet, dass Sie entweder eine Instanz von FBSDKGraphRequest oder nil erhalten.

Sie können ein optionales auf einige verschiedene Arten behandeln.

  • Unter Verwendung eines Konstrukts guard
  • Verwendung des Konstrukts if let
  • Verwendung ?

Mit guard:

guard let graphRequest = FBSDKGraphRequest(graphPath: "me", parameters: params) else { 
    // Handle the fact that graphRequest is nil 
} 

graphRequest.start { ... } // graphRequest is guaranteed to be not nil 

Mit if let:

if let graphRequest = FBSDKGraphRequest(graphPath: "me", parameters: params) { 
    graphRequest.start { ... } // graphRequest is guaranteed to be not 
} else { 
    // Handle the fact that graphRequest is nil 
} 

Mit ?:

let graphRequest = FBSDKGraphRequest(graphPath: "me", parameters: params) 

graphRequest?.start { ... } 

Dies würde nichts still tun, wenn graphRequestnil ist.

EDIT 2: Mit der Facebook Swift SDK Art und Weise statt ihrer iOS SDK Weise

Sie scheinen die start Methode zu rufen.

FBSDKGraphRequestHandler ist ein typedef, die mit den folgenden Parametern definiert:

  • FBSDKGraphRequestConnection Verbindung
  • id Ergebnis
  • NSError Fehler

Also, wenn start Aufruf, müssen Sie berücksichtigen, diese Parameter im Verschluss.

graphRequest.start { connection, result, error in 
    ... 
} 

oder verwenden _ für die Parameter, die Sie sind nicht interessiert in

graphRequest.start { _, result, _ in 
    ... 
} 

. HINWEIS: Ihre switch Aussage wird wahrscheinlich nicht oben mit dem Code arbeiten. Sie müssen weitere Änderungen vornehmen, damit es mit den bereitgestellten Parametern (Verbindung, Ergebnis und Fehler) funktioniert. Auch hier scheint es, als würden Sie Facebooks Swift SDK-Code und iOS SDK-Code mischen.

+0

Seem behoben, aber einen Fehler nach dieser Zeile, Frage aktualisiert mit dem Bildschirm – GMX

+0

Vielen Dank für die Erklärung! Habe leider noch einen bekommen, ich versuche es zu reparieren .... Antwort aktualisiert, irgendwelche Tipps? – GMX

+1

@GMX Ich habe meine Antwort aktualisiert. Es scheint jedoch, dass Sie Code von Facebook Swift SDK und iOS SDK mischen. Dies wird wahrscheinlich zu anderen Fehlern führen. Da Sie anscheinend das iOS-SDK verwenden, sollten Sie sicherstellen, dass Ihr Code mit diesem SDK funktioniert. Siehe https://developers.facebook.com/docs/ios –