fbsdk graph请求后变量值变为nil
Variable value becomes nil after fbsdk graph request
我正在用 swift 编写一个项目,我对这门语言还很陌生。
我将一个变量"username"的值设置为我对facebook sdk的请求结果,但是在图形请求之后我的变量值变成了nil。变量赋值在图形请求本身内部工作正常。
这是我的代码。
import UIKit
import FBSDKCoreKit
import FBSDKLoginKit
import FBSDKShareKit
class SecondViewController: UIViewController {
var username : String = "X"
let label = UILabel()
override func viewDidLoad() {
super.viewDidLoad()
FBSDKGraphRequest(graphPath: "/me", parameters: ["Fields" : "name"]).start {
(connection, result, err) in
if err != nil {
print("Failed to start request", err)
return
}
var res = result as? [String : Any]
self.username = (res?["name"] as! String)
print(self.username)
}
print(self.username)
}
}
请求内的第一个打印语句工作正常,但请求外的第二个打印语句打印空行。
当我想将标签的文本设置为用户名变量的值时也是如此。它在请求中起作用,但没有做任何其他事情。
我认为首先执行登录哪些权限:
loginManager.logIn(withReadPermissions: ["email","public_profile"], from: self) { (FBSDKLoginManagerLoginResult, Error) in
if(Error == nil){
if(FBSDKLoginManagerLoginResult?.isCancelled)!{
SVProgressHUD.showError(withStatus: "You Cancelled To Login With Facebook, \n Try Again Later!")
}else if(FBSDKLoginManagerLoginResult?.token != nil){
SVProgressHUD.showSuccess(withStatus: "Login Successfull")
SVProgressHUD.show(withStatus: loadingText)
if((FBSDKAccessToken.current()) != nil){
FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, email"]).start(completionHandler: { (connection, result, error) -> Void in
if (error == nil){
let resultDic = result as! [String: Any]
let facebookProfileUrl : String! = "http://graph.facebook.com/\((FBSDKLoginManagerLoginResult?.token!.userID)!)/picture?type=large"
var fbId = (FBSDKLoginManagerLoginResult?.token!.userID)! as String
var name = resultDic["name"] as! String
var email = resultDic["email"] as! String
}else{
print(error!.localizedDescription)
}
})
}
}
}
}
因为你的内部代码正在运行,这意味着你表现得很好,我认为它在线程中工作,这意味着你的底部 "print(self.username)" 首先打印,然后在块内部的上面,
您可以在完成图形 API 响应后将其记录下来。
我正在用 swift 编写一个项目,我对这门语言还很陌生。
我将一个变量"username"的值设置为我对facebook sdk的请求结果,但是在图形请求之后我的变量值变成了nil。变量赋值在图形请求本身内部工作正常。
这是我的代码。
import UIKit
import FBSDKCoreKit
import FBSDKLoginKit
import FBSDKShareKit
class SecondViewController: UIViewController {
var username : String = "X"
let label = UILabel()
override func viewDidLoad() {
super.viewDidLoad()
FBSDKGraphRequest(graphPath: "/me", parameters: ["Fields" : "name"]).start {
(connection, result, err) in
if err != nil {
print("Failed to start request", err)
return
}
var res = result as? [String : Any]
self.username = (res?["name"] as! String)
print(self.username)
}
print(self.username)
}
}
请求内的第一个打印语句工作正常,但请求外的第二个打印语句打印空行。
当我想将标签的文本设置为用户名变量的值时也是如此。它在请求中起作用,但没有做任何其他事情。
我认为首先执行登录哪些权限:
loginManager.logIn(withReadPermissions: ["email","public_profile"], from: self) { (FBSDKLoginManagerLoginResult, Error) in
if(Error == nil){
if(FBSDKLoginManagerLoginResult?.isCancelled)!{
SVProgressHUD.showError(withStatus: "You Cancelled To Login With Facebook, \n Try Again Later!")
}else if(FBSDKLoginManagerLoginResult?.token != nil){
SVProgressHUD.showSuccess(withStatus: "Login Successfull")
SVProgressHUD.show(withStatus: loadingText)
if((FBSDKAccessToken.current()) != nil){
FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, email"]).start(completionHandler: { (connection, result, error) -> Void in
if (error == nil){
let resultDic = result as! [String: Any]
let facebookProfileUrl : String! = "http://graph.facebook.com/\((FBSDKLoginManagerLoginResult?.token!.userID)!)/picture?type=large"
var fbId = (FBSDKLoginManagerLoginResult?.token!.userID)! as String
var name = resultDic["name"] as! String
var email = resultDic["email"] as! String
}else{
print(error!.localizedDescription)
}
})
}
}
}
}
因为你的内部代码正在运行,这意味着你表现得很好,我认为它在线程中工作,这意味着你的底部 "print(self.username)" 首先打印,然后在块内部的上面,
您可以在完成图形 API 响应后将其记录下来。