我现有的 TableViewController 在 Xcode 11 beta1 上崩溃
Posted
技术标签:
【中文标题】我现有的 TableViewController 在 Xcode 11 beta1 上崩溃【英文标题】:My Existing TableViewController is crashing on Xcode 11 beta1 【发布时间】:2019-06-19 07:31:21 【问题描述】:我开发了一个UITableViewController
屏幕。它在 Xcode 10.2 上运行良好,但是。当我在 Xcode 11 beta 1 上运行时,它会崩溃,如下所示。
我没有发现发生了什么。
在 ViewDidLoad 中
override func viewDidLoad()
super.viewDidLoad()
tableView.tableFooterView = UIView()
plateNoPrefix.becomeFirstResponder() // static cell textfield in tableViewcell
异常... 在更新过程中尝试访问 table view 的 visibleCells,这是不允许的
【问题讨论】:
从 xcode 11 beta 4 开始,它会抛出警告而不是崩溃。 对我来说,设置UITextView.text = "text"
时会发生这种情况,经过几次测试后,它已被修复/停止在该行崩溃。
【参考方案1】:
在为 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
【讨论】:
我得到 Assert's not crash: [Assert] 尝试在表视图上调用 -cellForRowAtIndexPath: 在更新其可见单元格的过程中,这是不允许的。在 UITableViewAlertForCellForRowAtIndexPathAccessDuringUpdate 处创建一个符号断点【参考方案2】:这是 iOS 13 中的一个新异常,UITableView 将引发该异常,以防止并主动提醒您以前会导致未定义行为和各种奇怪、看似无关且难以调试的情况问题
请看Apple Developer Forum
【讨论】:
在 Beta7 上有同样的问题。找到解决方案后会在这里更新以上是关于我现有的 TableViewController 在 Xcode 11 beta1 上崩溃的主要内容,如果未能解决你的问题,请参考以下文章
将现有的 vue js 应用程序添加到我现有的 .net 核心项目中?