2017-02-03 4 views
0

Ich brauche etwas Hilfe! Ich kann nicht scheinen, nur eine einzelne Reihe von Parse zu löschen. Ich habe den "Swipe to delete" herausgefunden, aber wenn Sie versuchen, etwas aus der Tabelle zu löschen, tut es nichts. Ich bekomme keine Fehler. Nichts wird gelöscht. Das ist mein Code.Löschen Sie eine einzelne Zeile in Parse mit Swift 3

 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() 
       } 
      } 
     }) 
    } 
} 

Kurz gesagt, möchte ich von der tableView einen Beitrag löschen und auf der Parse-Seite als auch löschen. Wenn ich ändern:

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

zu

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

es einfach alles gelöscht, die der Benutzer jemals geschrieben hat. Bitte helfen Sie!

Antwort

0

Sie nicht innerhalb UITableViewCellEditingStyle becasue IndexPath ist bereits etabliert abfragen müssen, welche Sie löschen möchten.

Jetzt habe ich ein paar zusätzliche Bits zu dieser Logik hinzugefügt.

1 :) Sie können die Zelle verschieben, um die Schaltfläche zum Löschen anzuzeigen. Nach dem Klicken bestätigt es, wenn Sie löschen möchten.
2 :) Sobald gelöscht wird eine Fade stattfinden. Es wird dann die tableView aktualisieren und das Objekt im Hintergrund im Hintergrund analysieren.

FeatherPostsArray die Sie sehen, ich habe Ihr Array von Objekten, die Sie in der tableView verwendet. In deiner numberOfRowsInSection hättest du darauf zählen können.

So ist es das, was es sein sollte:

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] 

    } 

Lassen Sie mich wissen, wenn Sie nicht weiterkommen.

+0

Dies funktionierte. Ich musste es ein wenig zwicken, aber es funktionierte großartig! Vielen Dank! –

+0

Sie begrüßen Kumpel! – Cliffordwh