我在解析和用户ID facebook之间传递数据时遇到了一些问题,我在下面有这个错误:
你能帮帮我吗?由于未捕获的异常而终止应用 'NSInvalidArgumentException',原因:'无法使用nil作为键或 PFObject上的值。使用NSNull作为值。
我在FacebookSDK
和解析之间的代码以获取用户的信息
override func viewDidLoad() {
super.viewDidLoad()
self.Username.delegate = self
self.Name.delegate = self
self.emailUser.delegate = self
self.genderUser.delegate = self
//import data from facebook
let graphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, gender, email"])
graphRequest.startWithCompletionHandler( {
(connection, result, error) -> Void in
if error != nil {
print( error)
} else if let result = result {
PFUser.currentUser()?["gender"] = result["gender"]
PFUser.currentUser()?["name"] = result["name"]
PFUser.currentUser()?["email"] = result["email"]
PFUser.currentUser()?.save()
let userId = result ["id"] as! String
let facebookProfilePictureUrl = "https://graph.facebook.com/" + userId + "/picture?type=small"
if let fbpicUrl = NSURL(string: facebookProfilePictureUrl) {
if let data = NSData(contentsOfURL: fbpicUrl) {
self.imageUser.image = UIImage(data: data)
let imageFile:PFFile = PFFile(data: data)
PFUser.currentUser()?["image"] = imageFile
PFUser.currentUser()?.save()
//Insert info user in profile
self.Name.text = PFUser.currentUser()?["name"] as? String
self.genderUser.text = PFUser.currentUser()?["gender"] as? String
self.emailUser.text = PFUser.currentUser()?["email"] as? String
}
}
}
})
答案 0 :(得分:1)
就像错误所说的那样,这些行中的任何一行都将nil分配给PFUser对象:
PFUser.currentUser()?["gender"] = result["gender"]
PFUser.currentUser()?["name"] = result["name"]
PFUser.currentUser()?["email"] = result["email"]
PFUser.currentUser()?["image"] = imageFile
找出结果中的哪些值为nil并相应地采取措施。由于Parse不支持对象指针'nil',因此您必须使用[NSNull null]
。
修改强>
我自己对Swift很陌生,但这是解决问题的可能方法。例如,您可以像这样进行检查:
PFUser.currentUser()?["gender"] = result["gender"] ?? NSNull()
这包括对作业的三元操作,基本上说'如果结果[“性别”]不是nil,则返回它,否则返回NSNull()'。这个解决方案当然只有在您不介意Parse对象具有NSNull()值时才有效。