在视图控制器之间传递 FBSDK 登录管理器结果

Posted

技术标签:

【中文标题】在视图控制器之间传递 FBSDK 登录管理器结果【英文标题】:Passing FBSDK login manager result between view controllers 【发布时间】:2017-05-19 10:11:21 【问题描述】:

我无法在视图控制器之间传输登录管理器结果, segue 与按钮相关联,其标识符为 s1。 我的设置是正确的。程序因绿色断点而崩溃。 这是我的代码: 对于第一个 VC:

import FBSDKLoginKit


class ViewController: UIViewController 

    var user_name: String?

    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    


    override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
        let fbLoginManager = FBSDKLoginManager()
        fbLoginManager.logIn(withReadPermissions: ["public_profile", "email"], from: self)  (result, error) in
            if let error = error 
                print("Failed to login: \(error.localizedDescription)")
                return
            

            guard let accessToken = FBSDKAccessToken.current() else 
                print("Failed to get access token")
                return
            

            let credential = FIRFacebookAuthProvider.credential(withAccessToken: accessToken.tokenString)


            FBSDKGraphRequest(graphpath: "/me", parameters: ["fields" : "email, id, locale"])
                .start(completionHandler:   (connection, result, error) in
                    guard let result = result as? NSDictionary,
                        let user_name = result["user_name"] as? String,

                        else 

                            return
                    

                    if(segue.identifier == "s1")
                        if let v = segue.destination as? Re 


                            v.uname=user_name ?? ""



                            //v.uname = usr.text ?? ""
                        
                                  


                )


            // Perform login by calling Firebase APIs
            FIRAuth.auth()?.signIn(with: credential, completion:  (user, error) in
                if let error = error 
                    print("Login error: \(error.localizedDescription)")
                    let alertController = UIAlertController(title: "Login Error", message: error.localizedDescription, preferredStyle: .alert)

                    return
                



            )

    


    



对于 Re,下一个 VC:

class Re: UIViewController 
    var uname: String?    
    @IBOutlet weak var l1: UILabel!
    var userfb: String?
    override func viewDidLoad() 
        super.viewDidLoad()
l1.text=uname
        // Do any additional setup after loading the view.
    


【问题讨论】:

【参考方案1】:

您需要使用您在顶部声明的实例变量,如下所示。 现在你已经创建了新的user_name 并使用了另一个user_name

guard let result = result as? NSDictionary,
                        user_name = result["user_name"] as? String,// make change here

                        else 

                            return
                    

【讨论】:

NSDictionary 类型的值未解包,您是要使用吗?或! 这是您的代码。我刚刚删除了局部变量并使用了您的全局变量。我 程序仍然崩溃。I.只是想在视图控制器之间传递 Facebook 登录管理器结果。我已经阅读了很多类似的代码来做到这一点

以上是关于在视图控制器之间传递 FBSDK 登录管理器结果的主要内容,如果未能解决你的问题,请参考以下文章

在视图控制器/情节提要场景之间传递核心数据结果

适用于 iOS 的 FBSDK:“发送到实例的无法识别的选择器”

试图在两个视图控制器之间传递数据

如何使用 post 方法将 JSON 数据从登录功能传递到另一个视图控制器?

在viewsController之间传递facebook信息

通过视图控制器传递用户数据[重复]