当应用程序准备好呈现警报时,从 AppDelegate 呈现警报

Posted

技术标签:

【中文标题】当应用程序准备好呈现警报时,从 AppDelegate 呈现警报【英文标题】:Present alert from AppDelegate when app is ready for presenting an alert 【发布时间】:2018-07-17 15:10:31 【问题描述】:

我正在使用Xcode 9.4.1 (9F2000)Swift

我在didFinishLaunchingWithOptions 中有这个AppDelegate

DispatchQueue.main.asyncAfter(deadline: .now() + 20.0, execute: 
    self.selectUser()
)

selectUser() 将调用一个函数,该函数显示一个警报,让用户选择他的名字。

当立即调用selectUser() 时,ViewController(我猜)尚未准备好加载,我收到如下消息:

2018-07-17 16:51:42.576783+0200 MyApp[2492:824301] 警告: 尝试在 谁的观点不在 窗口层次结构!

我认为有更好的方法可以做到这一点,例如:如果应用已准备好加载并呈现 UIAlertController,请调用 selectUser()

你知道怎么做吗?

【问题讨论】:

【参考方案1】:

您需要 applicationDidBecomeActive ,但请确保在您从后台返回时也调用它,因此如果您不希望再次调用它,请将代码包装在一次 var 中

func applicationDidBecomeActive(_ application: UIApplication) 
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.

【讨论】:

【参考方案2】:

由于您需要有一个根 viewController(故事板或编程),最简单的方法是在 viewController 中显示您的警报,因为如果完成了didFinishLaunchingWithOptions,您的“根”-viewController.view 将被显示。

【讨论】:

以上是关于当应用程序准备好呈现警报时,从 AppDelegate 呈现警报的主要内容,如果未能解决你的问题,请参考以下文章

当用户从 finder 打开 Cocoa 应用程序时打开一个窗口,而应用程序都准备好打开

Swift:从视图到警报视图或到另一个视图的语音转换

呈现警报控制器时 UIPopOverController 缩小

从 AppDelegate 到 PresentedViewController 的警报:“尝试在...上呈现 UIAlertController 已经在呈现 UIAlertController”

当 UIActivityViewController 呈现时,如何确保 UIActivityItemProvider 的项目准备就绪?

iOS 应用程序在警报视图关闭时崩溃