关闭应用程序时从推送通知显示 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
。可能是因为:
rootViewController
是另一个 UIViewController
UINavigationController
未设置为故事板中的 rootViewController
。
所以没有任何关于你从 self.window?.rootViewController
得到什么的打印,我想你可以 运行 这一行看看你是否可以得到你的 UINavigationController
:
var myNav = storyboard.instantiateViewControllerWithIdentifier("myNavIdHere") as? UINavigationController
只需确保将 ID 添加到您的 UINavigationController。 (这只是为了检查您是否可以访问 NavController)
刚刚发现问题所在,我正在从尚未初始化的导航控制器访问一些数据。
当我的应用程序从推送通知打开时,我试图显示一个视图控制器,但它崩溃了,因为我试图获取 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
。可能是因为:
rootViewController
是另一个UIViewController
UINavigationController
未设置为故事板中的rootViewController
。
所以没有任何关于你从 self.window?.rootViewController
得到什么的打印,我想你可以 运行 这一行看看你是否可以得到你的 UINavigationController
:
var myNav = storyboard.instantiateViewControllerWithIdentifier("myNavIdHere") as? UINavigationController
只需确保将 ID 添加到您的 UINavigationController。 (这只是为了检查您是否可以访问 NavController)
刚刚发现问题所在,我正在从尚未初始化的导航控制器访问一些数据。