尝试通过推送通知在 AppDelegate 中打开 SFSafariViewController

Posted

技术标签:

【中文标题】尝试通过推送通知在 AppDelegate 中打开 SFSafariViewController【英文标题】:Trying to Open SFSafariViewController in AppDelegate via Push Notification 【发布时间】:2016-12-09 16:21:44 【问题描述】:

当应用收到推送通知时,我正在尝试使用 Safari 打开 URL。当应用程序位于第一个视图控制器中时,这会成功。但是,如果应用程序进一步进入程序,我会收到错误

<SFSafariViewController: 0x10b20ae60> on <AdViewController: 0x100b14530> whose view is not in the window hierarchy!

(AdViewController 是我的第一个视图控制器,所以它仍然专注于那个。)

我已经搜索了这个网站,并尝试了所有关于这个错误的建议,但都失败了。目前,我的代码如下所示:

if MessageUrl != nil , let url = URL(string: MessageUrl!) 
   let safari = SFSafariViewController(url: url)
                self.window?.rootViewController?.presentedViewController?.present(safari, animated: true, completion: nil)

【问题讨论】:

你不能在呈现的 ViewController 上呈现 ViewController 好吧,我试过 self.window?.rootViewController?.present 同样的问题我猜。我知道它坏了,我太新了,无法理解修复。 【参考方案1】:

Get top most UIViewController我在该页面底部的“swift 3”答案中使用了 Appdeleagte 中的扩展 UIApplication,并将我的代码更改为:

if MessageUrl != nil , let url = URL(string: MessageUrl!) 
            let safari = SFSafariViewController(url: url)
             UIApplication.topViewController()?.present(safari, animated: true, completion: nil)
        

【讨论】:

以上是关于尝试通过推送通知在 AppDelegate 中打开 SFSafariViewController的主要内容,如果未能解决你的问题,请参考以下文章

在推送通知 Swift 2 AppDelegate 上加载特定的 viewController

没有 AppDelegate 的 SwiftUI 远程推送通知(Firebase 云消息传递)

如何将数据从 appdelegate 传递到视图控制器?

如果当前打开特定的 ViewController,如何检查 AppDelegate

推送通知:从 AppDelegate 导航到 ViewController

将从 AppDelegate 的推送通知中收到的数据传递给 ViewController