删除 UITableViewCell 时更新 firebase 中的数据
Posted
技术标签:
【中文标题】删除 UITableViewCell 时更新 firebase 中的数据【英文标题】:Updating data in firebase when deleting a UITableViewCell 【发布时间】:2018-01-18 14:06:29 【问题描述】:我有一个UITableView
,我正在使用commit editingStyle 函数在向左滑动时删除一个单元格。问题是当我这样做时,它会删除 firebase 中的正确数据,但随后它会再次更新它并且应用程序崩溃。这就是我得到的。
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
let taskToDelete = groupTask[indexPath.row]
if editingStyle == UITableViewCellEditingStyle.delete
groupTask.remove(at: indexPath.row)
DataService.instance.REF_GROUPS.child(group!.key).child("task").child(taskToDelete.id).removeValue(completionBlock: (error, refer) in
if error != nil
else
)
self.tableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.automatic)
我还有一个功能,当您点击一个单元格时,它会更新 firebase 中的一个子节点,然后显示一个图像。可能是导致崩溃的函数:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
guard let cell = tableView.cellForRow(at: indexPath) as? GroupTaskCell else return
if cell.isSelected == true
let selected = groupTask[indexPath.row]
DataService.instance.REF_GROUPS.observe(.value) (snapShot) in
DataService.instance.updateTaskStatus(desiredGroup: self.group!, selected: true, childPath: selected.id, handler: (complete) in
self.tableView.reloadData()
)
else
self.tableView.reloadData()
func updateTaskStatus(desiredGroup: Group, selected: Bool, childPath: String, handler: @escaping (_ taskArray: [Task]) -> ())
REF_GROUPS.child(desiredGroup.key).child("task").child(childPath).updateChildValues(["selected": selected])
关于如何解决这个问题的任何想法?
【问题讨论】:
【参考方案1】:你应该标记
self.tableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.automatic)
与 self.tableView.beginUpdates()
和 self.tableView.endUpdates()
所以应该是这样的
self.tableView.beginUpdates()
self.tableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.automatic)
self.tableView.endUpdates()
并确保您没有立即重新加载数据,因为这会导致崩溃。我认为您根本不应该重新加载数据,只需确保从 tableView 中删除单元格并从 Firebase 中删除数据就足够了。您可以在下次检索数据或呈现 tableView 时重新加载 tableView
【讨论】:
我试过了,但还是有同样的问题。还有其他想法吗? 你想在 didSelectCellForRow 上做什么?您是在重新加载数据还是呈现新视图? 我正在更新 firebase 中的一个孩子。看开头的图片(链接)以上是关于删除 UITableViewCell 时更新 firebase 中的数据的主要内容,如果未能解决你的问题,请参考以下文章
删除时的 UITableViewCell 不会移动 UITableViewCell 的 contentView
Swift - 更新 UILabel 文本时 UITableViewCell 跳转
滑动删除 UITableViewCell 时,偶尔会出现红色减号删除图标