在Facebook用Swiftlogin之后Segue不会触发

在此先感谢您的帮助!

我正在写一个快速的应用程序来实现Facebooklogin,并且在login完成后遇到了一些问题。

作为FBSDKLoginButtonDelegate的一部分,我有两个方法:

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

 func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {} 

loginbutton是正确实现的,我可以读取权限/ FB令牌,并将其传递到Amazon Cognito。

但奇怪的是,我不能以编程方式从login中退出,进入不同的视图(控制器)。

推入FBloginbutton将用户带到networking浏览器(Facebook SDK处理所有这些),并进行login。

如果我放置一个segue,如:

 dispatch_async(dispatch_get_main_queue(), { self.performSegueWithIdentifier("segueLoginViewtoHome", sender: nil }) 

到loginButton(),它从来没有真正执行(即,当Web浏览器消失,用户返回到视图与loginbutton,而不是由segue预期的新视图)。 我相信这行在浏览器窗口返回到保存loginbutton(和segue)的视图之前执行,但我不知道如何告诉程序“等待”视图成为唯一一个活动和可见再次执行segue。

我相信是这样的,因为如果我把相同的segue代码放到loginButtonDidLogOut()中,在那里不需要切换到浏览器,那么在退出的表单中推入“退出”屏幕的底部。

这个视图控制器被正确设置为委托,正如segue所显示的那样,如果编码在退出时发生,它将正常工作。

任何帮助将不胜感激,道歉的长问题,谢谢!

我通过创build一个名为fbLoginSuccess的全局布尔值来解决这个问题,初始化为false。 如果Facebooklogin成功,那么我将fbLoginSuccess设置为true,在那里你正在执行你的segue。 然后,我重写viewDidAppear()并在fbLoginSuccess为true的情况下执行segue。 这解决了它,因为viewDidAppear()从浏览器窗口返回后执行,这是你想要的。

 var fbLoginSuccess = false override func viewDidAppear(animated: Bool) { if (FBSDKAccessToken.currentAccessToken() != nil && fbLoginSuccess == true) { performSegueWithIdentifier("loginSegue", sender: self) } } func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) { print("User Logged In") if ((error) != nil) { // Process error print(error) } else if result.isCancelled { // Handle cancellations } else { fbLoginSuccess = true // If you ask for multiple permissions at once, you // should check if specific permissions missing if result.grantedPermissions.contains("email") { // Do work } } } 

希望能帮助到你!

我没有足够的评论声望,但改变你的'或'比较'||' 当AND'&&'检查时,看看是否login是成功的,令牌不为零为我工作。 否则,无论是否由于某种原因login,我都会继续。 可能只是我的问题,但希望能帮助别人。