尝试通过推送通知在 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 云消息传递)
如果当前打开特定的 ViewController,如何检查 AppDelegate