2016-07-29 9 views
1

を取得しようとしたとき、私はFBSDKLoginManagerLoginResultからユーザーの名前、メールアドレスとIDを取得し、エラーを取得しようとしている:FBSDKLoginManagerLoginResult valueForUndefinedKeyユーザーの電子メール

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ valueForUndefinedKey:]: this class is not key value coding-compliant for the key email.'

は、ここでは、コードです:また

class ViewController: UIViewController, FBSDKLoginButtonDelegate { 

     @IBOutlet weak var fbLogin: FBSDKLoginButton! 
     override func viewDidLoad() { 
      super.viewDidLoad() 
     fbLogin.readPermissions = ["public_profile", "email"] 
      fbLogin.delegate = self 
    } 

     func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) { 


      if ((error) != nil) 
      { 
       NSLog("User Logged In") 
      } 
      else if result.isCancelled { 
       NSLog("User cancels") 
      } 
      else { 
       if result.grantedPermissions.contains("email") 
       {    
        let userEmail : String = result.valueForKey("email") as! String //here I get crash 
        NSLog("User Email is: \(userEmail)") 
       } 
      } 
     } 
    } 

、使用可能なキーのリストが見つかりません

答えて

3

FBSDKGraphRequestを作成する必要があります。私が持っています

func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: NSError!) { 

    if ((error) != nil) { 
     // Process error 
    } else if result.isCancelled { 
     // Handle cancellations 
    } else { 
     let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields" : "id, email, name"]) 
     graphRequest.start(completionHandler: { (connection, result, error) -> Void in 
      if ((error) != nil) { 
       print("Error: \(error)") 
      } else { 
       if let user : NSString = result!.value(forKey: "name") as? NSString { 
        //print("user2: \(user)") 
        self.userLabel.text = "Logged in as \(user)" 
       } 
       if let id : NSString = result!.value(forKey: "id") as? NSString { 
        self.fbId = id 
        //print("id: \(id)") 
       } 
       if let email : NSString = result!.value(forKey: "email") as? NSString { 
        print("email: \(email)") 
       } 
      } 
     }) 
    } 
} 

この例ではswift verを使用しています。 3(xcodeベータ3)。

+0

いいえ!ただし、値の代わりにvalueForKey(値の代わりにgraphRequest.startの代わりにforKey:およびgraphRequest.startWithCompletionHandler( – user2976267

+0

Pardon、これは即時バージョンです)3.私はこれを私の回答に追加します – kometen

+0

これは私が素早く嫌いです。 – user2976267

関連する問題