Ich versuche, den Benutzernamen und das Foto von Facebook in meinen Code aufzunehmen. Ich kann beides, aber das Problem ist, dass das Segment aufgerufen wird, bevor die Daten zu mir zurückkehren! Wenn ich also zum nächsten Bildschirm gehe, sind die Variablen null! Hier ist mein Code:Facebook-Daten können nicht schnell genug abgerufen werden
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
}
}
Der zweite View-Controller druckt einen Nullwert für den Namen und dann die ersten View-Controller gibt den Namen und das Bild! (wenn ich bereits im zweiten View-Controller bin)
Wie kann ich diese Variablen über das Segment richtig übergeben? Jede Hilfe wird sehr geschätzt!
Setzen Sie einfach den 'performSegueWithIdentifier (" nextfb ", sender: self)' an den Ort, an dem die Facebook-Daten geladen wurden, z. Am Ende des Blocks gehen Sie zu 'FBSDKGraphRequest' (stellen Sie sicher, dass Sie den UI-Aufruf für den Haupt-Thread ausführen). – luk2302
Ich bin mir nicht sicher, ob ich es richtig gemacht habe, aber immer noch nicht funktioniert. Habe nur 'performSegueWithIdentifier (" nextfb ", sender: self)' jetzt genau, wo 'FBSDKGraphRequest' endet, aber immer noch den 2. VC ohne Daten lädt und nur dann den Benutzernamen ausgibt! –
hast du es *** *** *** den Aufruf von 'FBSDKGraphRequest'? Vor dem zweiten Schließen '}' !? – luk2302