警告:尝试在其视图不在 window 层次结构中的 UISplitViewController 上呈现 UIAlertController

Warning: Attempt to present UIAlertController on UISplitViewController whose view is not in the window hierarchy

大多数与此问题类似的问题是 presentviewDidAppear 之前被调用。这不是这里的原因。

本应用不使用NIB的Storyboards,所有操作都是程序化的。

应用程序 window 的 rootViewControllerUISplitViewController。拆分视图的视图控制器设置为两个 UINavigationController 的数组。一个子视图控制器然后模态地呈现一个视图控制器。问题是当视图控制器被模态呈现时,应用程序委托呈现的 UIAlertControllers 不会显示。它以其他方式工作。

我如何尝试呈现:

window?.rootViewController?.present(alert, animated: true, completion: nil)

我收到这个错误:

Attempt to present UIAlertController on UISplitViewController whose view is not in the window hierarchy

为了解决这个问题,我把这个函数放在我的应用程序委托中。

// Utility function to avoid:
// Warning: Attempt to present * on * whose view is not in the window hierarchy!
func showAlertGlobally(_ alert: UIAlertController) {
    let alertWindow = UIWindow(frame: UIScreen.main.bounds)
    alertWindow.windowLevel = UIWindowLevelAlert
    alertWindow.rootViewController = UIViewController()
    alertWindow.makeKeyAndVisible()
    alertWindow.rootViewController?.present(alert, animated: true, completion: nil)
}