Swift UIAlertController已完成并显示,但在viewDidLoad期间未显示

Swift UIAlertController已完成并显示,但在viewDidLoad期间未显示,swift,uialertcontroller,Swift,Uialertcontroller,我将在加载视图控制器后立即显示此警报控制器设置。然而,它并没有出现。 我相信我已经涵盖了所有方面-标题,信息,提醒风格,动作按钮和礼物。。。但仍然没有出现。 不确定我错过了什么 let array = quoteBank() print(array.sarcasticQuotes[0].quote) let title = "Message" let message = array.sarcasticQuotes[0].quote let alert

我将在加载视图控制器后立即显示此警报控制器设置。然而,它并没有出现。 我相信我已经涵盖了所有方面-标题,信息,提醒风格,动作按钮和礼物。。。但仍然没有出现。 不确定我错过了什么

  let array = quoteBank()

    print(array.sarcasticQuotes[0].quote)


    let title = "Message"
    let message = array.sarcasticQuotes[0].quote

    let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)

    alert.addAction(.init(title: "OK", style: .default, handler: nil))
   present(alert, animated: true, completion: nil)

您需要在主线程上执行该操作:

DispatchQueue.main.async {
    present(alert, animated: true, completion: nil)
}

这背后的原因是,视图控制器的层次结构将在
viewDidLoad
完成后设置。因此,通过执行此操作,您可以将警报在主线程上的显示时间安排为主线程执行完
viewdiload

后的时间。您需要在主线程上执行此操作:

DispatchQueue.main.async {
    present(alert, animated: true, completion: nil)
}

这背后的原因是,视图控制器的层次结构将在
viewDidLoad
完成后设置。因此,通过这样做,您将在主线程上显示警报的时间安排为主线程执行完
viewdiload

之后,尝试在
viewdiload
中显示警报为时过早。视图控制器尚未显示。使用查看显示

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    // Use this if statement to only show the alert once
    if self.isBeingPresented || self.isMovingToParentViewController {
        // show your alert here
    }
}

试图在
viewDidLoad
中显示警报太早。视图控制器尚未显示。使用查看显示

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    // Use this if statement to only show the alert once
    if self.isBeingPresented || self.isMovingToParentViewController {
        // show your alert here
    }
}

不要试图在
viewDidLoad
中显示警报。太快了。不要尝试在
viewDidLoad
中显示警报。那太早了。对你们两个来说,为什么我需要使用dispatch提供一个警报控制器?另外,为什么ViewDidIssue会更好?对于你们两个来说,为什么我需要使用dispatch提供一个警报控制器?还有,为什么ViewDid看起来会更好?这太神奇了!非常感谢。我很好奇
展示了哪些案例
,而且
正在移动到ARENTVIEWCONTROLLER
封面。您介意详细说明一下吗?@LinusGeffarth
isBeingPresented
在通过
present
呈现视图控制器时是正确的<当视图控制器被移动到父视图控制器(例如被推到导航控制器上)时,会调用code>isMovingToParentViewController。这太神奇了!非常感谢。我很好奇
展示了哪些案例
,而且
正在移动到ARENTVIEWCONTROLLER
封面。您介意详细说明一下吗?@LinusGeffarth
isBeingPresented
在通过
present
呈现视图控制器时是正确的<当视图控制器被移动到父视图控制器(例如被推到导航控制器上)时,会调用code>isMovingToParentViewController。