Ios Can';无法足够快地获取Facebook数据
我试图在我的代码中获取Facebook的用户名和照片。我可以同时做这两件事,但问题是在数据返回给我之前调用segue!因此,当我进入下一个屏幕时,变量为零!这是我的密码:Ios Can';无法足够快地获取Facebook数据,ios,facebook,Ios,Facebook,我试图在我的代码中获取Facebook的用户名和照片。我可以同时做这两件事,但问题是在数据返回给我之前调用segue!因此,当我进入下一个屏幕时,变量为零!这是我的密码: override func viewDidLoad() { super.viewDidLoad() //MARK: - FB Button customization: if (FBSDKAccessToken.currentAccessToken() == nil){ print(
override func viewDidLoad() {
super.viewDidLoad()
//MARK: - FB Button customization:
if (FBSDKAccessToken.currentAccessToken() == nil){
print("Not logged in")
}
else{
print("This is where you perform a segue.")
fetchProfile()
performSegueWithIdentifier("nextfb", sender: self)
}
}
func fetchProfile() {
print("fetch profile")
let parameters = ["fields": "email, name, picture.type(large)"]
FBSDKGraphRequest(graphPath: "me", parameters: parameters).startWithCompletionHandler { (connection, result, error) -> Void in
if error != nil {
print(error)
return
}
if let name = result["name"] as? String {
self.nome = name
print(name)
print(self.nome)
}
if let email = result["email"] as? String {
self.email = email
print(email)
}
// pega a imagem do usuário:
if let data = result["picture"]?!["data"]
{
if let url = data!["url"] as? String
{
let profilePictureURL = url
let imgURL = NSURL(string: profilePictureURL)
let imageData = NSData(contentsOfURL: imgURL!)
let image = UIImage(data: imageData!)
print(image)
self.foto = image!
}
}
}
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "nextfb" {
print("\nO NOME É: \(nome)\n")
let vc = segue.destinationViewController as! HomeViewController
vc.name = self.nome
//vc.photo = self.foto
}
}
第二个视图控制器打印名称的nil值,然后第一个视图控制器打印名称和图像!(当我已经在第二个视图控制器中时)
如何通过segue正确传递这些变量??非常感谢您的帮助 您呼叫的
performsguewithidentifier(“nextfb”,发件人:self)
位置错误。您正在检查您的访问令牌是否存在,如果您没有登录,则正在调用segue
相反,您应该这样做:
if let data = result["picture"]?!["data"]
{
if let url = data!["url"] as? String
{
let profilePictureURL = url
let imgURL = NSURL(string: profilePictureURL)
let imageData = NSData(contentsOfURL: imgURL!)
let image = UIImage(data: imageData!)
print(image)
self.foto = image!
performSegueWithIdentifier("nextfb", sender: self)
}
}
这样,只有在视图控制器上成功填充数据后,才能转到下一个控制器。您在错误的位置调用了
performsguewithidentifier(“nextfb”,sender:self)
。您正在检查您的访问令牌是否存在,如果您没有登录,则正在调用segue
相反,您应该这样做:
if let data = result["picture"]?!["data"]
{
if let url = data!["url"] as? String
{
let profilePictureURL = url
let imgURL = NSURL(string: profilePictureURL)
let imageData = NSData(contentsOfURL: imgURL!)
let image = UIImage(data: imageData!)
print(image)
self.foto = image!
performSegueWithIdentifier("nextfb", sender: self)
}
}
这样,只有当数据成功填充到视图控制器上时,您才能转到下一个控制器。只需将
performsguewithidentifier(“nextfb”,sender:self)
放在facebook数据加载的位置,例如,在传递到FBSDKGraphRequest的块末尾(确保在主线程上进行了UI调用)。不确定是否正确,但仍然无法工作。只有performsguewithidentifier(“nextfb”,发件人:self)
现在正是FBSDKGraphRequest
结束的地方,但仍然在加载第二个VC时没有数据,然后才打印用户名!在调用FBSDKGraphRequest
之前,是否在第二次关闭}
之前有它!不,当它完成时,我有它,因为将它放入此错误显示:隐式使用o在闭包中,使用“self.”使捕获语义显式
。我必须修改发送者做什么?我不明白这一点,segue不应该是发送者吗?只需将performsguewithidentifier(“nextfb”,发送者:self)放在
在加载facebook数据的位置,例如,在您传递到FBSDKGraphRequest的块的末尾(确保在主线程上进行UI调用)。不确定我是否正确,但仍然无法工作。只有performsgueWithIdentifier(“nextfb”,发件人:self)
现在正是FBSDKGraphRequest
结束的地方,但仍然在加载第二个VC时没有数据,然后才打印用户名!在调用FBSDKGraphRequest
之前,是否在第二次关闭}
之前有它!不,当它完成时,我有它,因为将它放入此错误显示:隐式使用o如果在闭包中使用“self”,则使用“self”。要使捕获语义显式化
。我必须修改发送方做什么?我不明白这一点,segue不应该是发送方吗?在这种情况下,发送方应该是什么?通过这样做,xcode指示错误:在闭包中隐式使用“self”,使用“self.”来生成捕获语义ics explicit
发送方可以是您想要的任何内容-这取决于您在下一个视图控制器上需要什么数据。我会暂时传递nil
,以确保正确调用segue,但之后您可以决定传递什么。你们两个都是天才!!现在工作正常!非常感谢您的帮助!!什么是在这种情况下,应该是发送方
?通过这样做,xcode指示一个错误:在闭包中隐式使用“self”,使用“self”。要使捕获语义显式
发送方可以是您想要的任何形式-它只取决于您在下一个视图控制器上需要什么数据。我现在将传递nil
,以确保e segue调用正确,但之后您可以决定通过什么。你们两个都是天才!!现在可以正常工作了!非常感谢您的帮助!!