2016-03-26 14 views
1

Kullanıcının fb profil resmini getirmeye çalışıyorum ama şu ana kadar yapamadık. Ben basit bir şey yapmaya çalışıyorum: kullanıcı fb hesabı ile giriş yapın ve uygulama onun adı, e-posta ve profil resmi görünür başka bir görünüm gider. Kullanıcı adı ve e-posta tamam, ancak resmi alamıyorum!Facebook'un profil resmini nasıl çekebilirsiniz?

Uygulama benim gerçek kodumla çöküyor, çünkü görünüşe göre nil isteğe bağlı bir değeri kaldırıyorum ama neden sıfır olduğunu bilmiyorum.

Kodum: yorumlarınızı itibaren

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

Açıkça, 'imageData' nil'dir, yani URL doğru değildir. Neden niçin başarısız olduğunu görebilmek için bir istisna atar "NSData" yöntemini kullanmayın. – rmaddy

+0

Proje gezgininde Xcode'da "Breakpoint Navigator'ı Göster" düğmesine tıklayın. Ardından, ekranın sol alt köşesindeki artı işaretini tıklayın. "İstisna Ayrılma Noktası Ekle" ye tıklayın. Bir özel durumla karşılaşıldığında bir kesme noktası eklemelidir. Ardından, "po " yazabilir ve bununla ilişkili bir bellek adresi/değeri olup olmadığını görebilirsiniz. Bu size biraz yön vermeli: Nereye bakmalı. – Adrian

+0

getProfPic func'de: image = UIImage (data: imageData!) // BURADA KOD KAZALARI Yaptım, ancak bulduğum kodun çoğu objelerdeydi ve sadece birkaç tanesi hızlıydı. Bu, stackoverflow'ta benzer bir soruda bulduğum örneklerden biriydi. –

cevap

0

Ben bir nil unwrapping önlemek için (izin veriyorsa), Swift koşullu bağlama metodolojisi ile yapıyor olmalıdır görüntü görevlendirilmesi de çöküyor anlıyoruz İsteğe bağlı değer:

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

Ayrıca, gördüğünüz gibi valueForKey yöntemini kullanmıyorum.

+1

Teşekkür ederiz, @OhadM! "Result.valueForKey" yerine önerinizle çalışmak işe yaradı! Yapmam gereken tek şey, bir URL'yi bir görüntüye dönüştürmekti! Hepinize teşekkürler, çocuklar! –

İlgili konular