嗨,希望你能提供帮助。
在每个单元格中,我都有一个直接从表格视图响应的文本字段。我通过封闭在单元格中保存数据。
make_unique
通过实例我删除第一个单元格,数据数组计数和行数在日志后相等,但如果我尝试编辑最后一个单元格中的文本字段并点击返回,则应用程序崩溃,索引超出范围。
如果在删除期间记录 - 数组中有5个字符串,但这个正确单元格的indexPath.row是5.
但是如果我在删除时重新加载数据 - 编辑最后一个单元格的一切都很好,但UI不顺畅。
答案 0 :(得分:1)
您的问题是,在分配闭包时捕获indexPath.row
,对于最后一个单元格,它将具有值“4”。如果随后删除了较早的单元格,则数组中的最后一个元素现在为“3”,但捕获的值不会更改;它仍然是4。
当您编辑最后一个单元格中的文本字段时,捕获的值4用于访问您的模型,并且您将获得数组边界异常。
关闭执行时,您可以使用indexPath(for:)
来确定适当的索引路径:
cell.tableViewClosure = {[unowned self] in
if let indexPath = self.tableView.indexPath(for: cell) {
self.tableView.beginUpdates()
Strings.shared.strings[indexPath.row] = cell.textField.text!
self.tableView.reloadRows(at: [indexPath], with: .automatic)
self.tableView.endUpdates()
}
}
答案 1 :(得分:0)
indexPath.row从0开始。因此范围将为0-4。如果您在数组中使用5个字符串并使用.count - 将返回5.
只需执行indexPath.row - 1
即可将关闭调整为1(索引超出范围)。