在 table 视图或集合视图中删除与 IndexPath 关联的 CKRecord 的可靠方法是什么?
What is a robust approach to deleting a CKRecord associated with an IndexPath in a table view or collection view?
基本上是为了删除“离线”单元格,我使用此方法,以便无论何时从右向左滑动,用户都可以删除 tableview 单元格。
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if (editingStyle == .delete) {
self.polls.remove(at: indexPath.row)
}
}
不过,显然不影响我之前创建的单元格内容CKRecord
。那么我如何才能在用户滑动删除的确切行中获取和删除 CKRecord
数据?
假设 polls
是声明为 [CKRecord]
的数据源数组,您必须做三件事。
- 从数据源数组中获取给定索引处的记录,并将其从适当的
CKDatabase
. 中删除
- 从数据源数组中删除记录(您已经这样做了)。
- 删除调用
deleteRowsAtIndexPaths
并传递 [indexPath]
的 table 视图中的行。
例如(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)
}
}
})
}
}
基本上是为了删除“离线”单元格,我使用此方法,以便无论何时从右向左滑动,用户都可以删除 tableview 单元格。
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if (editingStyle == .delete) {
self.polls.remove(at: indexPath.row)
}
}
不过,显然不影响我之前创建的单元格内容CKRecord
。那么我如何才能在用户滑动删除的确切行中获取和删除 CKRecord
数据?
假设 polls
是声明为 [CKRecord]
的数据源数组,您必须做三件事。
- 从数据源数组中获取给定索引处的记录,并将其从适当的
CKDatabase
. 中删除
- 从数据源数组中删除记录(您已经这样做了)。
- 删除调用
deleteRowsAtIndexPaths
并传递[indexPath]
的 table 视图中的行。
例如(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)
}
}
})
}
}