我正在尝试在我的代码中获取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正确传递这些变量?非常感谢任何帮助!
答案 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)
}
}
这样,只有在视图控制器上成功填充数据后才能转到下一个控制器。