如何通过PFQuery从Parse中删除对象

时间:2016-10-15 18:40:26

标签: ios swift parse-platform

我试图通过swift从UserRequests类中删除一个对象,只要该对象属于当前用户,并且requestResponded不等于true。但是,我在objects.deleteInBackground()处收到错误,当我删除此行时,该功能仍无法正常工作。

func deleteRequest(){
    let check = PFQuery(className: "UserRequests")
    check.whereKey("requestResponded", equalTo: "True")

    let query = PFQuery(className: "UserRequests")
    query.whereKey("username", equalTo: (PFUser.currentUser()?.objectForKey("username") as! String))
    query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
        if objects != nil && error == nil{
            // Successfully retrieved the object
            check.getFirstObjectInBackgroundWithBlock {
                (object: PFObject?, error: NSError?) -> Void in
                if error != nil || object == nil {
                    print("Not accepted.")
                    object!.deleteInBackground()
                    objects.deleteInBackground()
                } else {
                    print("Successfully retrieved the object.")
                }
            }
        }else{
            self.performSegueWithIdentifier("requestAccepted", sender: self)
        }
    })
}

1 个答案:

答案 0 :(得分:2)

这是因为对象是一个对象列表。您应该只删除1对象。

例如:

for object in objects {
    object.deleteInBackground()
}

此外,因为两个查询属于同一个类。我建议使用1个查询

<强>更新

func deleteRequest(){
    let query = PFQuery(className: "UserRequests")
    // the key "requestResponded" is not True
    query.whereKey("requestResponded", equalTo: "False")
    // for deleting the object is that it belongs to the current user
    query.whereKey("username", equalTo (PFUser.currentUser()?.objectForKey("username") as! String))
    query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
        if error != nil{
            print(error)
        }
        //  objects are those the key "requestResponded" is not True and belongs to the current user
        for object in objects {
            object.deleteInBackground()
        }
        // other case
        if objects.count == 0 { // no match result found
        }
    })
}

我猜你仍然会错过何时执行segue的条件