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

Posted

技术标签:

【中文标题】从 AppDelegate 到 PresentedViewController 的警报:“尝试在...上呈现 UIAlertController 已经在呈现 UIAlertController”【英文标题】:Alert from AppDelegate to PresentedViewController: "Attempt to present UIAlertController on ... whitch is already presenting UIAlertController" 【发布时间】:2019-06-26 18:33:46 【问题描述】:

我正在尝试将来自 AppDelegate 的 UIAlertController 中的 Push Notification(PN) 的消息呈现给当前的 ViewController。如果我发送 1 个没有问题的 PN 并显示警报!但是在单击警报中的“确定”按钮之前,我发送了第二个 PN,该消息未显示并收到以下警告消息:

"警告:尝试显示 已经呈现 "

那么我如何处理超过 1 个 PN 或者是否可以显示最后一个 PN?

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) 
        guard let aps = userInfo["aps"] as? [String: AnyObject] else 
            completionHandler(.failed)
            return
        
        dump(aps)
        let message = aps["alert"] as? String
        let alertController = UIAlertController(title: "New message", message: message, preferredStyle: .alert)
        let ok = UIAlertAction(title: "OK", style: .default, handler: nil)
        alertController.addAction(ok)

        DispatchQueue.main.async 
            self.window?.rootViewController?.presentedViewController?.present(alertController, animated: true, completion: nil)
        

        completionHandler(UIBackgroundFetchResult.noData)

【问题讨论】:

【参考方案1】:

您可以管理通知列表/堆栈并连续显示它们,直到您的列表/堆栈为空。

查看此答案以了解如何显示多个警报:Attempt to present UIAlertController on View Controller which is already presenting (null) [Swift]

【讨论】:

以上是关于从 AppDelegate 到 PresentedViewController 的警报:“尝试在...上呈现 UIAlertController 已经在呈现 UIAlertController”的主要内容,如果未能解决你的问题,请参考以下文章

presented 新控制器时如果控制器的view背景颜色alpha不为1时,为什么会变成黑色背景。

从 AppDelegate 重定向到特定屏幕:点击通知

如何将数据从 AppDelegate 传递到 ViewController?

通过 UIButton 从 Appdelegate 导航到另一个视图

如何从 Appdelegate 导航到另一个视图控制器

从 appDelegate 转到视图控制器