gpt4 book ai didi

swift - SwipeCellKit 删除 tableView 中的最后一行会产生错误

转载 作者:搜寻专家 更新时间:2023-11-01 06:27:35 24 4
gpt4 key购买 nike

删除 tableView 中的一行在它是最后一个现有行之前工作正常。然后我崩溃了:“由于未捕获的异常‘NSInternalInconsistencyException’而终止应用程序,原因:‘无效更新:第 0 节中的行数无效。更新后现有节中包含的行数 (1) 必须等于中包含的行数更新 (1) 之前的那个部分,加上或减去从该部分插入或删除的行数(0 插入,1 删除),加上或减去移入或移出该部分的行数(0 移入,0搬出去了)。”

我知道这个函数中的单元格数量与预期不同:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

if categoryArray?.count == 0 { // <<-- i imagine this line cause problem, though deleting it will not let me show "no categories made yet" and while it would be better to use "if let" statement i make "array" in realm which never is nil as its being created with 0 elements(which is not nil)
return 1
}

return categoryArray?.count ?? 1
}

问题是我如何以删除有效的方式实现这一点,并且我仍然可以显示一个“替换”单元格,该单元格将显示而不是空的 tableView。

这是整个滑动删除功能:

扩展 CategoriesViewController:SwipeTableViewCellDelegate {

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

do{
try self.realm.write{
self.realm.delete((self.categoryArray?[indexPath.row])!)
}
} catch {
print("Error deleting category\(error)")
}
}

return [deleteAction]
}

如有任何建议,我们将不胜感激

最佳答案

您的问题似乎与您更新数据源的方式有关。首先,我建议不要在有 0 个单元格时人为地显示 1 个单元格。还有其他方法可以显示空 TableView (动态添加 View 以显示表为空)。也就是说,我会在您显示的 tableView 函数中更改您的代码。

其次,如果没有看到您的其余代码,我无法判断,但看起来您正在从源中删除数据,但您是否曾刷新支持 TableView 的本地数组?如果你不这样做,你会得到上面的错误。那么如何解决它,对吗?

这里的关键是确保您更新支持模型的数据以及驱动 TableView 的本地模型。

编辑关于如何显示一个空的tableview的问题,尝试如下:

    override func numberOfSections(in tableView: UITableView) -> Int {
let numOfSectons: Int = 1;
if (itemStore.allItems.count>0){
tableView.separatorStyle = .singleLine
tableView.backgroundView = nil
} else{
let noDataFrame = CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: tableView.bounds.size.height)
let noData: UILabel = UILabel(frame: noDataFrame)
noData.text = "No Items!"
noData.textColor = .black
noData.textAlignment = .center
tableView.backgroundView = noData
tableView.separatorStyle = .none
}
return numOfSectons
}

在上面的例子中,我支持 tableView 的模型是“itemStore”。当没有项目时,这将自动显示,无论模型是否加载为空,或者您是否从模型中删除项目。

关于swift - SwipeCellKit 删除 tableView 中的最后一行会产生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51865246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com