在关闭应用程序时,从推送通知中显示ViewController的正确方法

时间:2015-11-27 17:19:51

标签: ios swift apple-push-notifications

当我的应用程序从推送通知中打开时,我试图显示一个视图控制器,但它崩溃了,因为我试图获取UINavigationController,而UINavigationController尚未在AppDelegate didFinishLaunchingWithOptions函数。

我的代码是:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    if let userInfo = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? NSDictionary {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let profileController = storyboard.instantiateViewControllerWithIdentifier("profileViewControllerIdentifier") as! ProfileViewController

        let navigationController = self.window?.rootViewController as! UINavigationController
        navigationController.pushViewController(profileController, animated: false)
    }
}

在应用关闭时来自推送通知时显示ViewController的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

因此,我看到的主要原因是您的rootViewController不是UINavigationController。可能是因为:

  1. rootViewController是另一个UIViewController
  2. UINavigationController未在故事板中设置为rootViewController
  3. 所以没有关于你从self.window?.rootViewController获得什么的任何印刷品我认为你可以运行这一行来看看你是否可以获得UINavigationController

    var myNav = storyboard.instantiateViewControllerWithIdentifier("myNavIdHere") as? UINavigationController
    

    只需确保为您的UINavigationController添加ID即可。 (这只是为了检查你是否可以访问你的NavController)

答案 1 :(得分:0)

刚刚发现问题所在,我正在访问一些尚未初始化的导航控制器中的数据。