Inicie session con FBSDK, no puede realizar segue

He instalado el SDK de Facebook , seguido todos los requisitos, funciona como puedo extraer datos de la count de Facebook del usuario, pero no puedo realizar el segue una vez que haya iniciado session.

Aparece un post de error:

Advertencia: ¡ Attempt to present <viewController1> on <FBSDKContainerViewController> whose view is not in the window hierarchy!

Estos son mis códigos:

  override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. if (FBSDKAccessToken.currentAccessToken() == nil) { print("not logged in") } else { print("logged in") } let loginButton = FBSDKLoginButton() loginButton.readPermissions = ["public_profile", "email", "user_friends"] loginButton.center = self.view.center loginButton.delegate = self self.view.addSubview(loginButton) } func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) { if ((error) != nil) { } else if result.isCancelled { } else { if result.grantedPermissions.contains("email") { // Do work returnUserData() addViewHierarchy() // self.performSegueWithIdentifier("signUpFollowPage", sender: self) } } } 

¿Alguien puede ayudar? Gracias

He estado luchando con el mismo problema (aunque estoy usando FBSDKLoginManager de logInWithReadPermissions ).

Si bien el problema parece ser que la callback (o su didCompleteWithResult delegado didCompleteWithResult ) se invoca antes de que se desestime la vista web de Safari, no puedo encontrar una buena solución.

Mi (horrible) respuesta ha sido retrasar la segue, para darle al FBSDKContainerViewController time para que sea descartado naturalmente. En tu caso:

 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(1 * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), { () -> Void in self.performSegueWithIdentifier("signUpFollowPage", sender: self) } 

Es posible que se salga con una demora más corta.

Esto me parece un error con el SDK de inicio de session de Facebook. Si encuentro time, podría mirar la fuente del SDK . Afortunadamente, la aplicación en la que estoy trabajando no se publicará hasta el año nuevo, así que espero que el problema se solucione en una versión posterior de todos modos.

Debe usar la function viewDidAppear() y verificar FBSDKAccessToken.currentAccessToken :

 override func viewDidAppear(animated:Bool){ if FBSDKAccessToken.currentAccessToken() != nil{ performSegueWithIdentifier("YOUR_SEGUE",sender:self) } } 

Me he enfrentado al mismo problema al iniciar session con FB. Aquí es cómo lo resolví. El problema es mientras se navega, el FBContainerView todavía está abierto. El uso de self.controller hará reference al FBContainerView y NO al controller Topmost y, por lo tanto, no tendrá navigation. Tendremos que volver a la parte superior de Most Controller y luego realizar la navigation.

Puede hacer esto sin realizar segue, presentando el controller de vista desde el controller superior como este

 let topController = self.topMostController() topController.presentViewController(secondController, animated: true, completion: nil) 

para get la parte superior la mayoría del controller define un método que siempre devolverá el controller más alto

 func topMostController()-> UIViewController { var topController = UIApplication.shanetworkingApplication().keyWindow?.rootViewController while((topController?.presentedViewController) != nil){ topController = topController?.presentedViewController } if(topController != nil){ return topController! } else{ return self } }