我正在清理我的表视图。我添加项目并通过Realm对象存储它们。每个项目都有一个类别,这些类别是我的表格视图中的部分。类别会随着项目的添加而更新,并且如果添加了新类别,它将在表视图中显示为一部分。一切正常。
但是,删除是一个问题。当用户滑动以删除节中的最后一项时,我也希望删除节标题。这是我用来管理删除(通过SwipeCellKit)的代码:
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> [SwipeAction]? {
guard orientation == .right else { return nil }
let deleteAction = SwipeAction(style: .destructive, title: "Delete") { action, indexPath in
//remove from
self.updateModel(at: indexPath)
}
deleteAction.image = UIImage(named: "delete-icon")
return [deleteAction]
}
updateModel()函数从Realm中删除该项目。
我有一个函数也可以重新计算类别:
func loadCategories() {
let localCat = try! Realm().objects(Items.self).filter("list_id = '\(list_id)'").distinct(by: ["item_category"])
var localCatArr : [String] = []
for cat in (localCat) {
localCatArr.append(cat.item_category)
}
categories = localCatArr
if categories.count == 0 {
categories.append("New List")
}
}
还有一个用于在items数组中重新加载数据的函数(该函数还尝试重新加载表视图):
func loadItems() {
itemsList = try! Realm().objects(Items.self).filter("list_id = '\(list_id)'").sorted(byKeyPath: "item_category")
loadCategories()
tableView.reloadData()
}
在完成处理程序中,我尝试调用此函数和tableView.reloadData,但是在以下方面出现错误:
由于未捕获的异常“ NSInternalInconsistencyException”而终止应用程序,原因:“试图从第2节中删除第0行,但更新前只有2个节”
我认为我需要再次调用numberOfSections()并重新构建事物,但无法弄清楚如何在不崩溃的情况下实现这一点。我的思路是否正确,对如何更新此方法有何建议?