在为 iOS 13 提供支持时,我也遇到了同样的问题。
这是 iOS 13 中的一个新异常,UITableView
将引发该异常以防止并主动提醒您以前会导致未定义行为和各种奇怪、看似无关且难以调试的问题(包括崩溃)的情况。
这里发生的事情UITableView
是在要求其 dataSource 为每个单元格返回一个单元格的过程中,visible row
并正在配置返回单元格的属性以便显示它们。在此更新的中间——很可能在来自表格视图本身的关于特定行的回调中,例如
tableView(_:cellForRowAt:) tableView(_:canEditRowAt:)
,等等——您的代码要求表格视图返回可见单元格。这显然是有问题的,因为UITableView
正处于准备这些单元格的中间,所以它不可能返回有意义的答案。
解决此问题的方法是查看引发visibleCells
此问题时在回溯中调用的exception
位置,然后执行以下两项操作之一:
选项1:
将使用visibleCells
移到更好的地方,这样您就不需要visibleCells
在创建/配置/更新这些相同单元格的过程中调用的某个地方。请求可见单元格的好地方是在表格视图布局之后,因此例如,如果表格视图是视图控制器的视图,您可以使用viewDidLayoutSubviews
(),或者在UITableView
调用super.layoutSubviews()
.
选项 2:
根据您实际尝试执行的操作,您可能可以完全跳过使用可见单元格。例如,您可能能够利用回调tableView(_:willDisplay:forRowAt:)
并
tableView(_:didEndDisplaying:forRowAt:)
跟踪单元格何时可见。
如果您遇到此异常并且您认为您正在从应该有效/允许的位置请求可见单元格,请在您遇到此异常时分享回溯以及有关您尝试执行的操作的详细信息。
更新:
我确定但plateNoPrefix.becomeFirstResponder()
导致崩溃。截至目前,您可以通过将此代码粘贴到viewDidAppear
方法中来进行检查
或者
延迟后执行此代码(为我工作)
DispatchQueue.main.asyncAfter(deadline: .now()+0.1) {
// Your code
}
有关详细信息,您可以参考Apple Developer Forum