用FBSDK登录,无法执行segue

jim*_*jim 3 login ios segue swift fbsdk

我已经安装了Facebook SDK,遵循了所有要求,因为我可以从用户的Facebook帐户中提取数据,但是我登录后无法执行segue.

我收到一条错误消息:

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

这是我的代码:

    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)


        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?谢谢

小智 7

我同样的问题一直在努力(虽然我使用FBSDKLoginManagerlogInWithReadPermissions).

虽然问题似乎didCompleteWithResult是在Safari Web视图被解除之前调用了回调(或您的委托调用),但我找不到一个好的解决方案.

我(可怕的)答案是推迟segue,给自己FBSDKContainerViewController时间解雇.在你的情况下:

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

有可能延迟更短的时间.

这让我觉得Facebook登录SDK有一个错误.如果我找时间,我可能会查看SDK源代码.幸运的是,我正在开发的应用程序直到新的一年才会发布,所以我希望无论如何都可以在以后的版本中修复该问题.