gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:58:04 24 4
gpt4 key购买 nike

您好,希望对您有所帮助。

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

cell.tableViewClosure = {[unowned self] in
self.tableView.beginUpdates()
// Singleton
Strings.shared.strings[indexPath.row] = cell.textField.text!
self.tableView.reloadRows(at: [indexPath], with: .automatic)
self.tableView.endUpdates()
}

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

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

但如果我在删除时重新加载数据 - 编辑最后一个单元格一切正常,但 UI 不流畅。

最佳答案

您的问题是 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()
}
}

关于ios - 删除单元格时索引超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50767963/

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