2016-04-25 16 views
0

Grundsätzlich zum Löschen der Zelle "offline" verwende ich diese Methode, so dass der Benutzer die Tabelle Tabellenzelle löschen kann, wenn Sie von rechts nach links wischen.Wie lösche ich einen CKRecord bei indexPath? (UITableView)

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 
     if(editingStyle == UITableViewCellEditingStyle.Delete){ 
     self.polls.removeAtIndex(indexPath.row) 
} 

aber es wirkt sich offensichtlich nicht die CKRecord des Zellinhalts ich vor erstellt. Wie kann ich also die CKRecord-Daten in genau der Zeile abrufen und löschen, auf die der Benutzer zum Löschen löschte?

+1

Das hängt von Ihrem Modell ab. Was ist Umfragen? – vadian

+0

Umfragen ist ein CKRecord – user3545063

Antwort

1

Angenommen polls ist die Datenquelle Array als [CKRecord] deklariert, müssen Sie drei Dinge tun.

  1. den Datensatz aus dem Datenquellen-Array Erhalten bei dem angegebenen Index und entfernt sie aus den entsprechenden CKDatabase.
  2. Entfernen Sie den Datensatz aus dem Datenquellenarray (Sie tun dies bereits).
  3. Löschen Sie die Zeile in der Tabellenansicht mit dem Aufruf deleteRowsAtIndexPaths über [indexPath].

Zum Beispiel (publicDatabase ist die tatsächliche CKDatabase Instanz):

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 
    if editingStyle == .Delete { 
     let record = polls[indexPath.row] 
     publicDatabase.deleteRecordWithID(record.recordID, completionHandler: ({returnRecord, error in 
      // do error handling 
     }) 
     polls.removeAtIndex(indexPath.row) 
     tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 
    } 
} 

Edit:

Für eine korrekte Fehlerbehandlung müssen Sie den Code aus Schritt zwei und drei in die stellen könnten Abschlussblock.

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 
    if editingStyle == .Delete { 
     let record = polls[indexPath.row] 
     publicDatabase.deleteRecordWithID(record.recordID, completionHandler: ({returnRecord, error in 
      if error != nil { 
      // do error handling 
      } else { 
      self.polls.removeAtIndex(indexPath.row) 
      dispatch_async(dispatch_get_main_queue()) { 
       self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 
      } 
      } 
     }) 
    } 
} 
+0

Danke für Ihre Antwort. Ja, Umfragen ist das Datenquellenarray (ich war nicht sicher, wie man es nennt) Das Problem ist, dass ich wirklich nicht weiß, wie man den Rekord von den Wahlen am gegebenen Index erhält. Können Sie das näher ausführen? – user3545063

+0

Ich habe die Antwort bearbeitet. – vadian

+0

Danke, dass du dir die Zeit genommen hast! Ich habe gerade mit der "seriösen" iOS-Entwicklung begonnen und die Betrachtung von Codebeispielen funktioniert am besten, um das Konzept zu verstehen. – user3545063