2017-05-19 17 views
0

보기 컨트롤러간에 로그인 관리자 결과를 전송할 수 없습니다. segue는 단추와 연결되며 식별자는 s1입니다. 설정이 정확합니다. 프로그램이 녹색 중단 점으로 중단됩니다. 첫 VC에 대한 : 여기 내 코드입니다 보기 컨트롤러간에 FBSDK 로그인 관리자 결과 전달

import FBSDKLoginKit 


class ViewController: UIViewController { 

    var user_name: String? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 


    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     let fbLoginManager = FBSDKLoginManager() 
     fbLoginManager.logIn(withReadPermissions: ["public_profile", "email"], from: self) { (result, error) in 
      if let error = error { 
       print("Failed to login: \(error.localizedDescription)") 
       return 
      } 

      guard let accessToken = FBSDKAccessToken.current() else { 
       print("Failed to get access token") 
       return 
      } 

      let credential = FIRFacebookAuthProvider.credential(withAccessToken: accessToken.tokenString) 


      FBSDKGraphRequest(graphPath: "/me", parameters: ["fields" : "email, id, locale"]) 
       .start(completionHandler: { (connection, result, error) in 
        guard let result = result as? NSDictionary, 
         let user_name = result["user_name"] as? String, 

         else { 

          return 
        } 

        if(segue.identifier == "s1"){ 
         if let v = segue.destination as? Re { 


          v.uname=user_name ?? "" 



          //v.uname = usr.text ?? "" 
         } 
        }    


       }) 


      // Perform login by calling Firebase APIs 
      FIRAuth.auth()?.signIn(with: credential, completion: { (user, error) in 
       if let error = error { 
        print("Login error: \(error.localizedDescription)") 
        let alertController = UIAlertController(title: "Login Error", message: error.localizedDescription, preferredStyle: .alert) 

        return 
       } 



      }) 

    } 


    } 


} 

그리고 재에 대한

다음 VC :

class Re: UIViewController { 
    var uname: String?  
    @IBOutlet weak var l1: UILabel! 
    var userfb: String? 
    override func viewDidLoad() { 
     super.viewDidLoad() 
l1.text=uname 
     // Do any additional setup after loading the view. 
    } 

} 

답변

0

당신은 다음과 같이 상단에 선언 한 인스턴스 변수를 사용해야합니다. 지금 당신이 user_name을 새로 만들도록하고 오류를주는 또 다른 user_name

guard let result = result as? NSDictionary, 
         user_name = result["user_name"] as? String,// make change here 

         else { 

          return 
        } 
+0

를 사용 조건 – dreamcode

+0

에서 오류를 제안하자 예상 한? – KKRocks

+0

타입 NSDictionary의 값을 풀지 않았습니까? 사용하려고 했습니까? 또는! – dreamcode