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

Posted

技术标签:

【中文标题】如何通过 PFQuery 从 Parse 中删除对象【英文标题】:How to delete object from Parse via PFQuery 【发布时间】:2016-10-15 18:40:26 【问题描述】:

只有当对象属于当前用户并且 requestResponded 不等于 true 时,我才尝试通过 swift 从类 UserRequests 中删除对象。但是,我在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】:

这是因为对象是对象的列表。您应该只逐个删除对象 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的条件

【讨论】:

谢谢。我怎样才能为此使用 1 个查询? 首先,您需要考虑条件,例如删除对象的条件是什么?执行segue的条件是什么? else case呢? 好的。问题中提到,删除对象的条件是它属于当前用户,并且键“requestResponded”不为True。 完美,有效!非常感谢!我刚刚意识到在这个特定功能中不需要转场。再次感谢您。

以上是关于如何通过 PFQuery 从 Parse 中删除对象的主要内容,如果未能解决你的问题,请参考以下文章

从 Parse 将 PFFile 转换为 NSData

如何通过滑动从 Parse 中的 UITableView 中删除对象?

从解析下载图像

如何正确实现 Parse 查询以获取有序数据

使用 Swift 从 Parse 中检索图像

从 2 个集合中解析查询