启动一个使用 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 中崩溃?