2016-03-26 5 views
1

Ich versuche, die Benutzer fb profile pic zu holen, konnte aber nicht so weit tun. Ich versuche etwas Einfaches zu tun: Der Benutzer loggt sich mit dem fb-Account ein und die App wechselt zu einer anderen Ansicht, in der sein Name, seine E-Mail-Adresse und sein Profilbild angezeigt werden. Benutzername und E-Mail sind in Ordnung, aber ich kann das Bild nicht sehen!Wie erfahre ich Facebooks Profilbild?

Die App stürzt mit meinem eigentlichen Code, weil offenbar einen Null optionalen Wert ich auspacken, aber ich weiß nicht, warum es gleich Null ist.

Mein Code:

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 



    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"id,email,name,picture.width(480).height(480)"]) 
    graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in 


     if ((error) != nil) 
     { 
      // Process error 
      print("Error: \(error)") 
     } 
     else 
     { 
      print("fetched user: \(result)") 
      let userName : NSString = result.valueForKey("name") as! NSString 
      print("User Name is: \(userName)") 
      let userEmail : NSString = result.valueForKey("email") as! NSString 
      print("User Email is: \(userEmail)") 

      let id = result.valueForKey("id") as! String 

      self.nameLabel.text = userName as String 
      self.emailLabel.text = userEmail as String 

      self.profilePic.image = self.getProfPic(id) 
     } 

    }) 


} 

func getProfPic(fid: String) -> UIImage? { 
    if (fid != "") { 
     let imgURLString = "http://graph.facebook.com/" + fid + "/picture?type=large" //type=normal 
     let imgURL = NSURL(string: imgURLString) 
     let imageData = NSData(contentsOfURL: imgURL!) 
     let image = UIImage(data: imageData!) // CODE CRASHES IN HERE 
     return image 
    } 
    return nil 
} 
+2

Offensichtlich 'imageData' ist' nil', die die URL bedeutet nicht korrekt ist. Warum nicht die Methode 'NSData' verwenden, die eine Ausnahme auslöst, damit Sie sehen können, warum sie fehlschlägt. – rmaddy

+0

Klicken Sie in Xcode im Projektnavigator auf die Schaltfläche "Show Breakpoint Navigator". Klicken Sie dann auf das Pluszeichen in der unteren linken Ecke des Bildschirms. Klicken Sie auf "Ausnahme Breakpoint hinzufügen". Das sollte einen Haltepunkt hinzufügen, wenn eine Ausnahme auftritt. Dann können Sie 'po ' eingeben und sehen, ob eine Speicheradresse/Wert zugeordnet ist. Das sollte dir eine Richtung geben: wohin du guckst. – Adrian

+0

In der Funktion getProfPic: let image = UIImage (Daten: imageData!) // CODE CRASHES IN HIER Ich tat, aber der größte Teil des Codes, den ich fand, war in Obj-c und nur ein paar in Swift. Dies war eines der Beispiele, die ich in einer ähnlichen Frage hier im Stackoverflow fand. –

Antwort

0

Von Ihren Kommentaren Ich verstehe, dass es an der Bildzuordnungs abstürzt, sollten Sie es mit der bedingten Bindung Methodik von Swift (falls lassen), um eine Null zu vermeiden tun Abwickeln Optionaler Wert:

if let data = result["picture"]?["data"] 
{ 
    if let url = data["url"] as? String 
    { 
    profilePictureURL = url 
    } 
} 

Auch, wie Sie sehen können, verwende ich nicht die ValueForKey-Methode.

+1

Danke, @OhadM! Die Arbeit mit Ihrem Vorschlag anstelle von 'result.valueForKey' hat funktioniert! Alles was ich danach tun musste, war eine URL in ein Bild zu verwandeln! Danke euch allen, Leute !! –

Verwandte Themen