我试图获取用户的fb个人资料图片,但目前尚无法做到这一点。我尝试做一些简单的事情:用户使用fb帐户登录,应用程序转到另一个视图,其中显示了他的姓名,电子邮件和个人资料照片。用户的姓名和电子邮件都可以,但我无法获得图片!
应用程序崩溃了我的实际代码,因为显然我打开了一个零可选值,但我不知道它为什么没有。
我的代码:
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
}
答案 0 :(得分:0)
从你的评论我明白它在图像分配时崩溃了,你应该用Swift的条件绑定方法(如果让)来做,以避免展开一个nil可选值:
if let data = result["picture"]?["data"]
{
if let url = data["url"] as? String
{
profilePictureURL = url
}
}
另外,正如您所看到的,我没有使用valueForKey方法。