删除单元格时索引超出范围

时间:2018-06-08 20:27:34

标签: ios swift xcode uikit

嗨,希望你能提供帮助。

在每个单元格中,我都有一个直接从表格视图响应的文本字段。我通过封闭在单元格中保存数据。

make_unique

通过实例我删除第一个单元格,数据数组计数和行数在日志后相等,但如果我尝试编辑最后一个单元格中的文本字段并点击返回,则应用程序崩溃,索引超出范围。

如果在删除期间记录 - 数组中有5个字符串,但这个正确单元格的indexPath.row是5.

但是如果我在删除时重新加载数据 - 编辑最后一个单元格的一切都很好,但UI不顺畅。

2 个答案:

答案 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(索引超出范围)。