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

Correct way to show ViewController from push notification when app is closed

当我的应用程序从推送通知打开时,我试图显示一个视图控制器,但它崩溃了,因为我试图获取 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 的正确方法是什么?

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

  1. rootViewController 是另一个 UIViewController
  2. UINavigationController 未设置为故事板中的 rootViewController

所以没有任何关于你从 self.window?.rootViewController 得到什么的打印,我想你可以 运行 这一行看看你是否可以得到你的 UINavigationController:

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

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

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