如何在indexPath中删除CKRecord? (UITableView的)

时间:2016-04-25 15:04:20

标签: ios uitableview cloudkit nsindexpath ckrecord

基本上要删除单元格“离线”我使用此方法,这样无论何时从右向左滑动,用户都可以删除tableview单元格。

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

但是,它显然不会影响我之前创建的单元格内容的CKRecord。那么如何在用户刷到删除的确切行上获取和删除CKRecord数据呢?

1 个答案:

答案 0 :(得分:1)

假设polls是声明为[CKRecord]的数据源数组,您必须做三件事。

  1. 从给定索引处的数据源数组中获取记录,并将其从相应的CKDatabase中删除。
  2. 从数据源阵列中删除记录(您已经这样做了。)
  3. 删除通过deleteRowsAtIndexPaths。{/ li>调用[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)
        }
    }
    

    修改

    为了正确处理错误,您可能必须将第二步和第三步的代码放入完成块中。

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