当我想使用tableview.deleteRows(at:,with :)时,应用程序崩溃

时间:2016-11-11 19:53:36

标签: ios swift uitableview

我已经看过很多关于这个主题的话题,但我仍然有错误......

这是我在tableview委托方法中的代码(当用户滑动并单击单元格上的删除按钮时调用):

self.tableView.beginUpdates()

if self.data[sectionType]!.isEmpty {
    self.data.removeValue(forKey: sectionType)
}

self.tableView.deleteRows(at: [indexPath], with: .fade)
self.tableView.endUpdates()

我已经实现了numberOfSections委托方法,如下所示:

func numberOfSections(in tableView: UITableView) -> Int {
    return data.count
}

这是我得到的错误:

***由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:' UITableView内部错误:无法生成旧部分计数的新部分地图:1和新部分计数:0& #39;

如果我用reloadData()替换deleteRows(在tableView中)方法,我会得到同样的错误......

我用断点检查,当错误发生时我输入if条件。所以数据被更新(removeValue()调用后的0个元素),我调用了deleteRows方法。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您是要删除行还是部分?

if self.data[sectionType]!.isEmpty {
    self.data.removeValue(forKey: sectionType)
}

建议您尝试删除某个部分。如果你是,那么应该跟这类东西:

let indexSet = NSMutableIndexSet()
indexSet.addIndex(section)
self.tableView.deleteSections(indexSet, withRowAnimation: .fade)

如果您要删除一行,请将顶部更改为以下内容:

if self.data[sectionType]!.isEmpty {
    self.data[sectionType].remove(at: rowToRemove)
}

答案 1 :(得分:0)

看起来您可能正在删除该部分中的所有行,而不是一个单元格。

我假设self.data是一个字典,其中键是部分,值是包含单元格信息的数组。 而不是删除字典的键。就像你在这里......

self.data.removeValue(forKey: sectionType)

您可能想要访问该部分并仅删除该行。像这样......

data[sectionType]?.remove(at: indexPath.row)

我假设您对方法numberOfRowsInSection:的返回值类似于......

return data[sectionType]?.count

希望这在某种程度上有所帮助。