【问题标题】:Swift can't get Facebook usernameSwift 无法获取 Facebook 用户名
【发布时间】:2015-08-05 08:58:33
【问题描述】:

我在 swift 中使用最新的 Facebook SDK。我的问题是当我尝试将我的 Facebook 名称传递给变量时。有我的代码:

func returnUserData()
{
    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
    graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

        if ((error) != nil)
        {
            // Process error
            println("Error: \(error)")
        }
        else
        {
            // This variable is declared under my class declaration
            self.userFacebook = result.valueForKey("name") as! String
            println(self.userFacebook) //it's works, my Facebook name appear
        }
    })
}

但是,当我尝试在此函数(returnUserData)之外使用我的变量“userFacebook”时,结果为“nil”。 我不明白为什么我的变量只设置在函数中而不是我的类中。

谢谢

【问题讨论】:

  • “我不明白为什么我的变量只在函数中而不是在我的类中设置”——很可能是因为请求是以异步方式发出的。
  • 你知道同步时尚吗?

标签: ios facebook swift facebook-sdk-4.0


【解决方案1】:

您通过参数请求获取什么数据,例如获取名称。

这样的请求参数

["fields": "id, name, first_name, last_name, picture.type(large), email"]

试试这个代码:

@IBAction func btnFBLoginPressed(sender: AnyObject) {
    var fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
    fbLoginManager .logInWithReadPermissions(["email"], handler: { (result, error) -> Void in
        if (error == nil){
            var fbloginresult : FBSDKLoginManagerLoginResult = result
            if(fbloginresult.grantedPermissions.contains("email"))
            {
                self.getFBUserData()
                fbLoginManager.logOut()
            }
        }
    })
}

func getFBUserData(){
    if((FBSDKAccessToken.currentAccessToken()) != nil){
        FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).startWithCompletionHandler({ (connection, result, error) -> Void in
            if (error == nil){
                println(result)
                println(result["name"])
            }
        })
    }
}

【讨论】:

  • 同样的问题,你的代码只是做一个 Facebook 连接并获取带有参数的数据。当我调用 getFBUserData() 函数时,如果我执行 println(self.usernameFacebook) 只需返回“nil”
  • println(result) 工作正常,但如果我执行“self.usernameFacebook = result[”,则无法在函数 getFBUserData() 事件之外获取 result["fisrt_name"] 的值fisrt_name"] as! String"。如果我在 viewDidLoad() 函数中调用 getFBUserData() 后尝试 println(self.usernameFacebook),它会返回“nil”
  • 嗯,好吧,你知道在这个异步函数之外传递值的解决方案吗?
  • 你有没有代码示例来解释,我不太明白?
  • 在哪里使用 Facebook 数据? @迈克尔
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-24
  • 2017-09-29
  • 2019-01-13
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多