ios - 展开 Segue 和多线程
问题描述
视图控制器从父视图控制器以模态方式启动,如果按下三个按钮之一,则稍后展开到其父视图:
@IBAction func parentSelected(_ sender: UIButton) {
switch sender.tag {
case 1:
parentType = ParentStoryboardId.meetings
case 2:
parentType = ParentStoryboardId.accounts
case 3:
parentType = ParentStoryboardId.contacts
default:
parentType = ParentStoryboardId.accounts
}
self.performSegue(withIdentifier: "unwindToNotes", sender: self)
}
父 VC 中的 unwind segue 处理程序然后启动另一个带有条目列表的 Table VC:
@IBAction func unwindToNotes(sender: UIStoryboardSegue) {
if let sourceViewController = sender.source as? SelectParentVC {
DispatchQueue.main.async {
guard let parentType = sourceViewController.parentType
else {
return
}
self.parentSelected = parentType
self.displayParents(parentType)
self.selectParentView.isHidden = true
}
}
}
最初,在父 VC 中执行 unwind segue 处理程序调用的所有 UI 操作时,我没有指定主队列。并且我试图调用的列表视图没有显示,尽管调试确认列表 VC 正在部分执行。
似乎从 unwind segue 处理程序调用的一些 UI 操作被降级到后台线程。我试图弄清楚这是如何发生的,因为导致“展开”操作的所有操作都没有在后台线程上显式运行。任何见解或链接将不胜感激!
解决方案
您的问题不在于您没有在主队列上运行。你的问题是你试图呈现一个新的视图控制器,而一个正在被解雇的过程中。
通过使用 aDispatchQueue.main.async
您会导致视图控制器的呈现发生在主运行循环的下一次迭代中,在前一个视图控制器已被解除之后。
推荐阅读
- go - 可以使用很多匿名函数吗?
- gradle - 传递依赖的 gradle force 版本不起作用。似乎没有排除、覆盖或强制适用
- c - 如何使指针指向数组中的所有元素?
- excel - 求和公式错误:显示 1,73472E-17 而不是 0
- sql-server - SQL Server 代理的凭据无效 [2018]
- reactjs - 这是如何在反应中创建项目符号数组
- android - 退出时片段到片段共享元素的转换不起作用
- r - 如何在 R 中使用标准输入
- mule - 使用 OAuth 的方法级授权
- swagger - 我可以为其他 Swagger 化的 API 构建 Swagger UI 吗?