Facebook 使用 Swift 和 Parse 登录到主 ViewController

Posted

技术标签:

【中文标题】Facebook 使用 Swift 和 Parse 登录到主 ViewController【英文标题】:Facebook Sign In Segue To Main ViewController With Swift and Parse 【发布时间】:2015-10-14 17:41:40 【问题描述】:

我正在使用带有自定义 Facebook 登录按钮的 Parse / Swift。加载成功,用户可以登录,但是登录成功后,MainViewController只闪现,然后返回登录页面。

成功登录 Facebook 后,如何让它使用 segue 或转到主视图控制器? Swift 2 的正确代码是什么?

下面是我在我的 Facebook 按钮的 SignInViewController 中的代码:

 @IBAction func didTapFacebookConnect(sender: AnyObject) 
    let permissions = [ "public_profile", "email", "user_friends" ]

    PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions,  block: 
        (user: PFUser?, error: NSError?) -> Void in

        self.dismissViewControllerAnimated(true, completion: nil)

        if let user = user 
            if user.isNew 
                print("User signed up and logged in through Facebook!")
             else 
                print("User logged in through Facebook!")
                self.dismissViewControllerAnimated(true, completion: nil)
            
         else 
              print ("The user cancelled the Facebook; login.")
        
    )

编辑:

现在这是我的新代码,但仍然存在新 ViewController 短暂弹出但随后返回登录页面的相同问题。

这是我收到的错误.. 警告:尝试在 U****d.SignInViewController: 0x7face0d1c310 上呈现 UITabBarController: 0x7face0f619f0>,其视图不在窗口层次结构中!

@IBAction func didTapFacebookConnect(sender: AnyObject) 
    let permissions = [ "public_profile", "email", "user_friends" ]

    PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions,  block: 
        (user: PFUser?, error: NSError?) -> Void in

        self.performSegueWithIdentifier("fbSignIn", sender: self)

        if let user = user 
            if user.isNew 
                print("User signed up and logged in through Facebook!")


             else 
                print("User logged in through Facebook!")

            
         else 
              print ("The user cancelled the Facebook; login.")
        

【问题讨论】:

【参考方案1】:

现在,如果用户成功登录,您实际上是在调用两次关闭视图控制器函数。我不确定您的视图控制器的情节提要流程,但这里没有证据表明存在转场。

dismissViewController(true,completion:nil)

但是,如果您在 Storboard 中创建了从登录控制器到应用主屏幕的转场,则在成功注册或登录后,您应该使用适当的标识符调用以下命令。

performSegueWithIdentifier("SEGUEIDENTIFIER",sender:nil)

另外,提示您应该检查 PFUser.currentUser() 以查看是否有缓存的用户实例,这样您就可以立即转到主视图控制器,而无需用户每次都登录。

【讨论】:

添加了这个... performSegueWithIdentifier("goSignIn") 但得到一个错误说...。无法将'String'类型的值转换为预期的参数类型......等等跨度> 我更新了 performSegueWithIdentifier 的参数调用。您必须为您的情况传入 nil 的发件人参数。另外,请确保您创建了一个 segue 并给它一个标识符,否则将引发异常。 我已经用 perform segue 更新了我的代码,但问题仍然存在。新的 ViewController 会短暂弹出,但随后会返回到 SignIn 页面。 这是我不断收到的错误... 警告:尝试在 上显示 ,其视图不在窗口层次结构中!

以上是关于Facebook 使用 Swift 和 Parse 登录到主 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode 6.3 (Swift) 中使用 Parse 和 Facebook 框架编译错误

使用 Swift 和 Parse 获取 Facebook UserData 时出现致命错误

在 iOS9 和 Swift2 中使用 Parse 登录 Facebook

在 Swift 中使用 Parse 登录 Facebook

无法使用 Swift 在 Xcode 中使用 Parse 1.7.2 和 Facebook SDK 4.1 创建新用户

XCode - Swift - 使用 Parse 进行 Facebook 身份验证