使用 Parse 在 iOS Swift 中更新对象

Posted

技术标签:

【中文标题】使用 Parse 在 iOS Swift 中更新对象【英文标题】:Updating Objects in iOS Swift with Parse 【发布时间】:2015-06-02 09:27:02 【问题描述】:

我有一个表“首选项”,其中用户首选项与用户名一起保存。我创建了这个方法来更新当前用户的偏好,但不知何故它似乎不起作用。我不确定是否需要“prefQuery.getObjectInBackgroundWithId(object.objectId)”部分。

我是 Parse 的新手,谁能帮我指出可能是什么问题。

func userPreferences()
    var currUser = PFUser.currentUser()
    var prefQuery = PFQuery(className: "preferences")
    var prefObj = PFObject(className: "preferences")

    if let currUserName = PFUser.currentUser()?.username 
        prefQuery.whereKey("username", equalTo: currUserName)
    

    prefQuery.findObjectsInBackgroundWithBlock 
        (objects: [AnyObject]?, error: NSError?) -> Void in

        if error == nil 
            if let objects = objects as? [PFObject] 
                for object in objects 

                    prefQuery.getObjectInBackgroundWithId(object.objectId)
                        (object: PFObject?, error: NSError?) -> Void in
                        if error == nil || object != nil 
                            prefObj["agestart"] = self.fromAge.text
                            prefObj["ageend"] = self.toAge.text
                            prefObj["location"] = self.location.text
                            ProgressHUD.showSuccess("Update successful")
                         else 
                            ProgressHUD.showError("Update failed")
                        
                    
                
            
        
    

【问题讨论】:

【参考方案1】:

我发现了问题并更新了我的代码。工作代码如下;问题在于“prefObj [”agestart“]”代码块,我使用了错误的查询实例。你可以比较两个sn-ps:

func userPreferences()
    var currUser = PFUser.currentUser()
    var prefQuery = PFQuery(className: "preferences")
    var prefObj = PFObject(className: "preferences")

    if let currUserName = PFUser.currentUser()?.username 
        prefQuery.whereKey("username", equalTo: currUserName)
    

    prefQuery.findObjectsInBackgroundWithBlock 
        (objects: [AnyObject]?, error: NSError?) -> Void in

        if error == nil 
            if let objects = objects as? [PFObject] 
                for object in objects 
                    prefQuery.getObjectInBackgroundWithId(object.objectId)
                        (prefObj: PFObject?, error: NSError?) -> Void in
                        if error != nil 
                            println(error)
                            ProgressHUD.showSuccess("Error while updating")
                         else if let prefObj = prefObj 
                            prefObj["agestart"] = self.fromAge.text
                            prefObj["ageend"] = self.toAge.text
                            prefObj["location"] = self.location.text
                                ProgressHUD.showSuccess("Update successful")
                            prefObj.saveInBackgroundWithBlock( (Bool, error: NSError!) -> Void in )
                        
                    
                
            
        
    

【讨论】:

【参考方案2】:

最大限度地减少代码的最佳方法,您可以在下面看到:

func userPreferences() 

        let prefQuery = PFQuery(className: "preferences")
        if let currUserName = PFUser.current()?.username 
            prefQuery.whereKey("username", equalTo: currUserName)
        

        prefQuery.findObjectsInBackground 
            (objects, error)  in

            if error == nil 
                if let objects = objects 
                    for object in objects 
                                object["agestart"] = "ur value"
                                object["ageend"] = "ur value"
                                object["location"] = "ur value"
                                print("Update successful")
                                object.saveInBackground()
                    
                
            
        
    

【讨论】:

以上是关于使用 Parse 在 iOS Swift 中更新对象的主要内容,如果未能解决你的问题,请参考以下文章

登录时多个用户访问的核心数据值(iOS Swift)

在 iOS9 和 Swift2 中使用 Parse 登录 Facebook

在 Swift (iOS) 中使用水平滑动浏览 Parse.com 中的数据

UITableView 中的单元格在 iOS 中选择之前不会更新(swift)

使用 getdatainbackground 从 Parse 检索多个图像(IOS - Swift)

如何为经典的帖子和评论模型构建 Parse 数据模型? (使用 iOS、Swift、Parse)