0

启动一个使用 tableview 的应用程序,模拟器在启动时崩溃,并且:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempted to call -cellForRowAtIndexPath: on the table view while it was in the process of updating its visible cells, which is not allowed.

相同的代码在 iOS 12 / Xcode 10.2 中工作。

注释掉下面突出显示的函数调用解决了崩溃:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    updateRowHeight(indexPath: indexPath) // CRASH IS BECAUSE OF CALLING THIS HERE
    return myTableView.frame.height / CGFloat(CellsDataEnum.allCases.count)
}


func updateRowHeight(indexPath: IndexPath) { // WHICH CALLS THIS
     myTableView.cellForRow(at: indexPath)?.textLabel?.font = UIFont.systemFont(ofSize: myTableView.frame.height / 10)
}

相反,我现在将字体设置为cellForRowAt

cell.textLabel?.font = UIFont.systemFont(ofSize: myTableView.frame.height / 10)

为什么第一个版本在 iOS 12 中可以运行,但在 iOS 13 中崩溃?

4

3 回答 3

2

(苹果通过反馈助手)

于 2019-07-06T23:03:51.783 回答
1

无需updateRowHeight从调用heightForRowAt。实际上,updateRowHeight应该删除整个方法。将字体设置在cellForRowAt.

并且鉴于您heightForRowAt为所有行返回相同的值,也请删除该方法。这是非常低效的。只需将rowHeight表格视图的属性设置为所需的高度。

这些更改应该适用于所有 iOS 版本,并且效率也更高。

iOS 13 可能存在问题,因为您在更新表格视图时尝试访问单元格。它可能在以前的版本中有效,cellForRowAt但从heightForRowAt.

于 2019-06-05T16:57:54.037 回答
0

在我的情况下非常相似的问题,通过避免这一行来解决:

 table.numberOfRows(inSection: cells.count)

这种在更新其单元格的过程中要求表格视图返回单元格数据的尝试会导致崩溃。删除该行后该表工作正常。

于 2019-09-16T08:18:46.167 回答