为什么我的警报不在视图层次结构中

Why my alert is not in the view hierarchy

我发现我的控制器不在这段代码的视图层次结构中,我在 viewDidLoad 中调用它:

if CLLocationManager.locationServicesEnabled() {
    // code
} else {
    let alertController = UIAlertController(...)
    //
    present(alertController)
}

如果我在主队列的 .async 或 .asyncAfter 中包装 else 子句,我的问题就会消失。 为什么会发生在这里?

谢谢!

根据您的问题,您尝试在加载 UIviewcontroller 层次结构之前加载 UIAlertController,在这里您可以通过两种方式进行,

  • 可以在主线程强制加载UIAlertController,所以这里需要使用.async或者.asyncAfter,但是不建议
  • 替代建议,但它会正常工作,您需要等待初始 UI 视图层次结构,我的意思是您需要将代码从 viewDidLoad 转换为 viewDidAppear。供参考:Difference between viewDidLoad and viewDidAppear