【发布时间】:2018-01-17 15:31:55
【问题描述】:
我有一个视图控制器,它是我的窗口根视图控制器的子视图控制器。该子视图控制器有一个表格视图,当我选择一行时,它会告诉父视图控制器以模态方式呈现视图控制器。然而,模态视图控制器永远不会出现。我创建了一个简单的测试视图控制器,它只打印viewDidLoad 和viewWillAppear。我注意到当我调用parentVC.present(testVC, animated:true, completion:nil) 时,viewDidLoad 运行,但viewWillAppear 没有运行。 viewWillAppear 只有在我以某种方式与 UI 交互时才会被调用。无论是点击、平移、滚动还是其他。
我已经花了几个小时试图调试它。主队列似乎没有被阻塞,我已经将问题简化为最基本的问题。模态呈现的视图控制器的viewWillAppear 在我再次与 UI 交互之前不会被调用。
什么可能导致这种症状?
【问题讨论】:
-
我们应该不用代码就能猜到吗?
-
你可能已经在调度异步队列中设置了这个
parentVC.present(testVC, animated:true, completion:nil)。分享您的代码。 -
@Rob 主队列是我想到并检查的第一件事。我把这个断言放进去是为了很好的衡量,没有例外。它在主线程上。
-
@Rob 没有。不。只是:``` func present() { dispatchPrecondition(condition: .onQueue(.main)) let vc = TestVC() present(vc, animated: true, completion: nil) } ``
-
没有。我只是在构建一个测试 VC。我想知道本地
vc是否超出范围会发生什么?虽然后来当我与屏幕交互时viewWillAppear被调用,所以vc显然没有被释放。
标签: ios uiviewcontroller uikit modalviewcontroller