2016-03-11 3 views
0

Я пытаюсь передать собственность моему следующему VC, используя prepareforSegue. Он называется, однако мой другой VC не загружается.Facebook LoginManager Callback/PrepareforSegue Swift

Оригинал

@IBAction func onSignupPressed(sender: AnyObject) { 
    FBSDKLoginManager().logInWithReadPermissions(permissions, 
    fromViewController: self) { result, error in 
    guard error == nil else { print("Login Error"); return } 
    guard result.grantedPermissions.contains("email") else { 
     print("No Email Permissions"); return } 
    self.getFBUserData() 
    dispatch_async(dispatch_get_main_queue()) { 
     self.performSegueWithIdentifier("loginSegue", sender: self) 
     } 
    } 
} 

Я был в состоянии получить следующий VC показ, делая вызывая мою функцию doLogin ниже. И там я создаю VC из раскадровки и представляю ее. Я считаю, что это связано с тем, что окно входа в систему Facebook появляется и закрывается. Я искал метод делегата, но ничего не нашел

@IBAction func onSignupPressed(sender: AnyObject) { 
    FBSDKLoginManager().logInWithReadPermissions(permissions, 
    fromViewController: self) { result, error in 
    guard error == nil else { print("Login Error"); return } 
    guard result.grantedPermissions.contains("email") else { 
     print("No Email Permissions"); return } 
    self.getFBUserData() 
    dispatch_async(dispatch_get_main_queue()) { 
     self.performSegueWithIdentifier("loginSegue", sender: self) 
     } 
    } 
} 

func getFBUserData(){ 

    let params = "id, name, first_name, last_name, picture.type(large),friends, email, birthday, work, photos, education, location, hometown, religion, likes, about" 

    if((FBSDKAccessToken.currentAccessToken()) != nil){ 
     FBSDKGraphRequest(graphPath: "me", parameters: ["fields":params]).startWithCompletionHandler({ (connection, result, error) -> Void in 

      if (error == nil){ 
       //everything works print the user data 
       print(result) 
       let resultdict = result as? NSDictionary 
       self.user = Mapper<User>().map(result) 
       self.doLogin() 
      } 

     }) 

    } 

} 


func doLogin() { 
     let successVC = self.storyboard?.instantiateViewControllerWithIdentifier("LoginSucessViewController") 
     self.presentViewController(successVC!, animated: true, completion: nil) 
      } 
+0

Просто, чтобы уточнить, что здесь не так. У вас есть метод 'prepareForSegue', где вы устанавливаете свойство на обозначении VC. (Я предполагаю, что свойство - это что-то, возвращаемое из этого вызова API графика). Затем вы указываете, что «это называется», предполагая, что вы имеете в виду вызов prepareForSegue? Показан ли успехVC? с неправильными или отсутствующими данными? или вообще не показано? Похоже, что 'performSegue' может быть вызван до возврата вашего GraphRequest. – JMFR

+0

Я могу получить доступ только к моему успеху с помощью метода instantiatevc, который не вызывает prepareforsegue. И в результате моя собственность, которую я устанавливаю на моем пункте назначения, равна нулю – mparrish91

ответ

0

Очень глупая ошибка! Не понял, что я могу просто установить свойство создания экземпляра VC!

func doLogin() { 

     let successVC = self.storyboard?.instantiateViewControllerWithIdentifier("LoginSucessViewController") as! LoginSucessViewController 
     successVC.currentUser = user 
     self.presentViewController(successVC, animated: true, completion: nil) 
} 
Смежные вопросы