无法快速获得Facebook数据

时间:2016-05-01 14:41:47

标签: ios facebook

我正在尝试在我的代码中获取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
    }
}

第二个View Controller输出名称的nil值,然后第一个View Controller输出名称和图像! (当我已经在第二个视图控制器中时)

如何通过segue正确传递这些变量?非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

您在错误的地方呼叫performSegueWithIdentifier("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) 
        }
    }

这样,只有在视图控制器上成功填充数据后才能转到下一个控制器。