Swift:在视图控制器之间传递 facebook 登录 graphRequest 结果

Posted

技术标签:

【中文标题】Swift:在视图控制器之间传递 facebook 登录 graphRequest 结果【英文标题】:Swift: Pass facebook login graphRequest result between viewcontrollers 【发布时间】:2015-04-16 22:09:59 【问题描述】:

我正在使用 facebook sdk 来实现我的应用程序的 facebook 登录。在我实现登录的视图控制器中,我还做了一个 facebook graphrequest,它允许我获取有关当前用户的信息。

这个图请求的代码是:

        let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphpath: "me", parameters: nil)
    graphRequest.startWithCompletionHandler( (connection, result, error) -> Void in            
        if error != nil                 
            //handle error
            println("graphrequest error")
         else 
            self.firstName = result.valueForKey("first_name") as? String
        
    )

用户信息作为“结果”参数从闭包中返回,然后可以分解为其组件,即上面的名字。

我知道我可以将名字值(以及所有其他值单独)从这个视图控制器传递到下一个。我的问题是(为了提高效率)如何在视图控制器之间传递实际的“结果”本身(包含所有用户数据)?

要传递它,我想我必须知道它的 TYPE,查看 facebook sdk 信息,我以为我发现类型是 FBSDKLoginManagerLoginResult 但是当我将它传递给下一个视图控制器时,它显示为 nil。在调试期间,我对结果进行了 PO 并最终得到以下结果(假测试用户)

    Printing description of result:

    email = "wvjuyaz_greenestein_1428614609@tfbnw.net";
    "first_name" = Barbara;
    gender = female;
    id = 1391655294490653;
    "last_name" = Greenestein;
    link = "https://www.facebook.com/app_scoped_user_id/1391655294490653/";
    locale = "en_US";
    "middle_name" = Amichehgcdjh;
    name = "Barbara Amichehgcdjh Greenestein";
    timezone = 0;
    "updated_time" = "2015-04-09T21:23:30+0000";
    verified = 0;

这是什么类型的?以及如何(完整地)将它传递给下一个视图控制器?

【问题讨论】:

【参考方案1】:

该数据类型是 JSON 字典——本质上是网络标准http://json.org

有几种方法可以传递这些数据,但最简单的方法可能是通过用户默认值将其存储为字符串并在另一端独立检索。

result.valueForKey("first_name")

如果您不熟悉 JSON,我建议您使用 swiftyjson 或 alamofire 之类的库,因为在 swift 中原生处理 JSON 仍然是一个痛点。

【讨论】:

【参考方案2】:

谢谢约翰为您提供信息。我当时并没有意识到这一点,但我可以在登录时从任何视图控制器对用户信息进行 facebook 查询。我不必自己在视图控制器之间传递信息。本质上,我可以在不同的视图控制器中运行我的问题中上面列出的图形请求代码。如果我以后需要传递 JSON 代码,我会按照您的指示进行操作。谢谢

【讨论】:

【参考方案3】:

为用户创建一个类并使用从 json 返回的数据初始化它的对象,然后将该对象传递到任何地方

【讨论】:

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

Swift - 在视图控制器之间传递数据

Swift 3 - 在视图控制器之间传递数据,然后再传递给另一个 2

如何在 Swift 中的视图控制器之间传递数据?

Swift 3 - 在视图控制器之间传递变量和函数

在表格视图的 swift 文件之间快速传递数组

在 Swift 中的页面视图控制器内的视图控制器之间传递数据