将信息添加到数据库Parse.com错误PFObject

时间:2015-10-08 11:41:02

标签: ios facebook swift parse-platform

我在解析和用户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
                        
                        
                    }
                    
                }
                
            }
            
        })

1 个答案:

答案 0 :(得分:1)

就像错误所说的那样,这些行中的任何一行都将nil分配给PFU​​ser对象:

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()值时才有效。