基本上要删除单元格“离线”我使用此方法,这样无论何时从右向左滑动,用户都可以删除tableview单元格。
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if(editingStyle == UITableViewCellEditingStyle.Delete){
self.polls.removeAtIndex(indexPath.row)
}
但是,它显然不会影响我之前创建的单元格内容的CKRecord。那么如何在用户刷到删除的确切行上获取和删除CKRecord数据呢?
答案 0 :(得分:1)
假设polls
是声明为[CKRecord]
的数据源数组,您必须做三件事。
CKDatabase
中删除。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)
}
}
})
}
}