didReceiveRemoteNotification presentViewController 在运行时从任何地方

Posted

技术标签:

【中文标题】didReceiveRemoteNotification presentViewController 在运行时从任何地方【英文标题】:didReceiveRemoteNotification presentViewController from anywhere when running 【发布时间】:2015-08-30 19:00:44 【问题描述】:

我正在尝试在收到远程通知时提供UIViewController

我的代码可以指向,但是当应用程序正在运行并且用户位于第一个屏幕/导航堆栈以外的任何位置时,不会显示 UIViewController

有人可以帮忙吗?注意我想在出现UIViewController 时保留导航栏

当我尝试在其他地方显示“UIViewController”时收到此警告

警告:尝试展示不在窗口层次结构中的视图!

提前致谢

这是我的didReceiveRemoteNotification:代码

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) 

  var payload = userInfo
  let requestID = payload["requestID"] as! String


  let rootViewController = self.window!.rootViewController as! UINavigationController

  let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
  let vc : RequestViewController = storyboard.instantiateViewControllerWithIdentifier("RequestViewController") as! RequestViewController
    vc.requestID = requestID

  let navigationController = UINavigationController(rootViewController: vc)

  rootViewController.presentViewController(navigationController, animated: true, completion: nil)


【问题讨论】:

用户如何进入一个新的导航栈? (例如,您使用的是 UITabBar 吗?) 不,没有UITabBar,只是一系列UINavigationController,视图呈现,但只在第一个堆栈上,所以只有初始视图控制器 带有警告的已编辑问题 【参考方案1】:

通过更改修复它:

rootViewController.presentViewController(navigationController, animated: true, completion: nil)

到:

rootViewController.visibleViewController!.presentViewController(navigationController, animated: false, completion: nil)

【讨论】:

以上是关于didReceiveRemoteNotification presentViewController 在运行时从任何地方的主要内容,如果未能解决你的问题,请参考以下文章

尽管 content_available = true,但没有在后台调用 didReceiveRemoteNotification