Ios Can';无法足够快地获取Facebook数据

Ios Can';无法足够快地获取Facebook数据,ios,facebook,Ios,Facebook,我试图在我的代码中获取Facebook的用户名和照片。我可以同时做这两件事,但问题是在数据返回给我之前调用segue!因此,当我进入下一个屏幕时,变量为零!这是我的密码: override func viewDidLoad() { super.viewDidLoad() //MARK: - FB Button customization: if (FBSDKAccessToken.currentAccessToken() == nil){ print(

我试图在我的代码中获取Facebook的用户名和照片。我可以同时做这两件事,但问题是在数据返回给我之前调用segue!因此,当我进入下一个屏幕时,变量为零!这是我的密码:

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调用正确,但之后您可以决定通过什么。你们两个都是天才!!现在可以正常工作了!非常感谢您的帮助!!