使用Swift 3删除Parse中的单行

时间:2017-02-03 21:36:33

标签: parse-platform swift3 xcode8

我需要一些帮助!我似乎无法从Parse中删除一行。我有"滑动删除"但是,当你尝试删除表中的某些内容时,它并没有做任何事情。我没有错。什么都没有删除。这是我的代码。

      override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
        // delete from server
        let myFeatherquery = PFQuery(className: "FeatherPosts")

        myFeatherquery.whereKey("message", equalTo: (PFUser.current()?.objectId!)!)
        myFeatherquery.findObjectsInBackground(block: { (objects, error) in
            if error != nil {
                print("THERE WAS AN ERROR")
            }else{
                for object in objects!{
                    self.messages.remove(at: indexPath.row)
                    object.deleteInBackground()
                    self.tableView.reloadData()
                }
            }
        })
    }
}

简而言之,我想删除tableView中的帖子,并在解析方面删除它。如果我改变:

"myFeatherquery.whereKey("message", equalTo: (PFUser.current()?.objectId!)!)"

"myFeatherquery.whereKey("userid", equalTo: (PFUser.current()?.objectId!)!)"

它刚刚删除了用户发布的所有内容。请帮忙!

1 个答案:

答案 0 :(得分:0)

您无需在UITableViewCellEditingStyle内查询,因为IndexPath已经建立了您要删除的项目。

现在我为这个逻辑添加了一些额外的内容。

1 :)您可以滑动单元格以查看删除按钮。点击后,它将确认您是否要删除 2 :)删除后,将发生淡入淡出。然后它将刷新tableView并在后台解析时删除对象。

您看到的

FeatherPostsArray是您在tableView中使用的对象数组。在你的numberOfRowsInSection中,你会对它有所了解。

所以它应该是这样的:

override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {

        var recClass = PFObject(className:"FeatherPosts")
        recClass = self.FeatherPostsArray[(indexPath as NSIndexPath).row]



        let deleteAction = UITableViewRowAction(style: .destructive, title: "Delete") { (action, indexPath) in
            let alert = UIAlertController(title: "App Name",
                                          message: "You sure you want to delete?",
                                          preferredStyle: .alert)

            let delete = UIAlertAction(title: "Delete", style: .default, handler: { (action) -> Void in

                recClass.deleteInBackground {(success, error) -> Void in
                    if error != nil {

                    }}

                self.FeatherPostsArray.remove(at: (indexPath as NSIndexPath).row)
                tableView.deleteRows(at: [indexPath], with: .fade)
                tableView.reloadData()
            })
            let cancel = UIAlertAction(title: "Cancel", style: .destructive, handler: { (action) -> Void in })
            alert.addAction(delete)
            alert.addAction(cancel)
            self.present(alert, animated: true, completion: nil)

        }

        //This is nice if you want to add a edit button later
        return [ deleteAction]

    }

如果你遇到困难,请告诉我。