2016-03-26 4 views
1

Я пытаюсь извлечь профиль fb профиля пользователя, но не смог сделать это. Я пытаюсь сделать что-то просто: пользователь входит в систему с учетной записью fb, и приложение переходит в другое представление, где появляется его имя, адрес электронной почты и изображение профиля. Имя пользователя и адрес электронной почты в порядке, но я не могу получить изображение!Как получить изображение профиля facebook?

Приложение разбивается с моим фактическим кодом, потому что, по-видимому, я разворачиваю нулевое значение, но я не знаю, почему это нуль.

Мой код:

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

Очевидно, что 'imageData' является' nil', что означает неправильный URL. Почему бы не использовать метод NSData, который генерирует исключение, чтобы вы могли понять, почему он терпит неудачу. – rmaddy

+0

В Xcode в навигаторе проекта нажмите кнопку «Показать навигатор точки останова». Затем щелкните знак плюса в нижнем левом углу экрана. Нажмите «Добавить точку останова исключения». Это должно добавить точку останова при возникновении исключения. Затем вы можете ввести 'po ' и посмотреть, есть ли адрес/значение памяти, связанное с ним. Это должно дать вам некоторое направление: где искать. – Adrian

+0

В getProfPic func: let image = UIImage (data: imageData!) // CODE CRASHES IN ЗДЕСЬ Я сделал, но большая часть кода, который я нашел, был в obj-c и только несколько в swift. Это был один из примеров, который я нашел в аналогичном вопросе здесь, в stackoverflow. –

ответ

0

Из ваших комментариев я понимаю, что он выходит из строя на присвоение изображения, вы должны делать это с условной привязки методологии Swift (если позволить), чтобы избежать разворачивания ноль дополнительное значение:

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

Кроме того, как вы можете видеть, я не использую метод valueForKey.

+1

Спасибо, @OhadM! Работа с вашим предложением вместо 'result.valueForKey' работала! Все, что мне нужно было сделать, это преобразовать url в изображение! Спасибо всем, ребята! –

Смежные вопросы