UIViewController present UIViewController 的问题

2019-07-05 16:33:49 浏览数 (3)

今天写了个demo才发现,当尝试在函数:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool

或者

RootViewController中的viewDidload

中调用present来弹出一个警告窗口(由UIAlertController创建的controller),这时候无法弹出窗口,并出现如下警告:

Warning: Attempt to present <UIAlertController: 0x102809200> on <SwiftDemoApp.ViewController: 0x10140db60> whose view is not in the window hierarchy!

究其原因是A present B,而A还没有完成显示步骤(whose view is not in the window hierarchy),正常情况下我们需要在viewDidAppear之后才能成功present另一个viewController。

通过尝试,找到了一种解决方案,通过performSelectoronMainThread方法,必须将waitUntilDone的参数设为false。通过异步串行的模式,我们可以使得弹出窗口的时间点会在viewDidAppear后被执行。

0 人点赞