2016-04-25 2 views
0

В принципе, для удаления ячейки «офлайн» я использую этот метод, так что всякий раз, когда вы пробираетесь справа налево, пользователь может удалить ячейку tableview.Как удалить CKRecord в indexPath? (UITableView)

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

Однако, очевидно, это не влияет на CKRecord содержимого ячейки, которое я создал ранее. Итак, как я могу получить и удалить данные CKRecord в точной строке, которую пользователь проверил на удаление?

+1

Это зависит от вашей модели. Что такое 'опросы'? – vadian

+0

опросы - это CKRecord – user3545063

ответ

1

Предполагая, что polls является массивом источников данных, объявленным как [CKRecord], вам нужно сделать три вещи.

  1. Получить запись из массива источников данных по данному индексу и удалить его из соответствующего CKDatabase.
  2. Удалите запись из массива источников данных (вы уже это делаете).
  3. Удалить строку в виде таблицы вызова deleteRowsAtIndexPaths[indexPath].

Например (publicDatabase фактическая CKDatabase экземпляра):

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:

Для правильной обработки ошибок, возможно, придется поставить код шага два и три в завершение блок.

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

Спасибо за ваш ответ. Да, опросы - это массив источников данных (я не был уверен, как его называть) Проблема в том, что я действительно не знаю, как получить запись из опросов по данному индексу. Не могли бы вы рассказать об этом? – user3545063

+0

Я отредактировал ответ. – vadian

+0

Спасибо, что нашли время! Я только начинал с «серьезного» развития iOS, и, глядя на примеры кода, я стараюсь лучше понять концепцию. – user3545063

Смежные вопросы