接收远程推送通知时打开视图控制器

Posted

技术标签:

【中文标题】接收远程推送通知时打开视图控制器【英文标题】:Open view controller when receiving remote Push Notification 【发布时间】:2012-11-16 12:39:02 【问题描述】:

我正在使用 storyboard ,我希望在用户收到远程推送通知时始终打开相同的视图,即使应用程序在后台或已打开。我需要呈现的视图是在情节提要中设置的初始视图控制器之后的四个视图。我读了这篇文章:

How can I show a modal view in response to a notification as a new window? (no parent vc)

Open a specific tab/view when user receives a push notification

这是我的代码:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 

    UINavigationController *navController = (UINavigationController *)self.window.rootViewController;
    notificacionViewController *menu = [navController.storyboard instantiateViewControllerWithIdentifier:@"notificacion"];

    // First item in array is bottom of stack, last item is top.
    navController.viewControllers = [NSArray arrayWithObjects:menu,nil];

    [self.window makeKeyAndVisible];



但是当我收到通知时,应用程序崩溃并出现以下错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[locationViewController setViewControllers:]: unrecognized selector sent to instance 0x42ccd0'

locationViewController 是在情节提要中设置为初始的视图控制器。

非常感谢。

【问题讨论】:

假设“HomeViewController”是Storyboard中的初始视图控制器,点击一个按钮后,通过push方法进入“SecondViewController”。现在,您将收到推送通知。您是要推送“NotificationViewController”还是模态呈现? Modally,所以我不确定你的解释,你建议推送堆栈直到我得到notificacionViewController?谢谢 【参考方案1】:

请尝试以下代码:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
    UINavigationController *navController = (UINavigationController *)self.window.rootViewController;
    NotificationViewController *notificationViewController = [[NotificationViewController alloc] init];
    [navController.visibleViewController.navigationController pushViewController:notificationViewController];    

【讨论】:

非常感谢。它给了我这个错误:“UINavigationController”没有可见的@interface 声明了选择器“pushViewController:”的行 [navController.visibleViewController.navigationController pushViewController:notificationViewController]; 请试试这个。 [navController.visibleViewController.navigationController pushViewController:notificationViewController Animation:YES];【参考方案2】:

我的代码与我看到的答案有些不同。事实是,唯一对我有用的代码如下:

    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;

    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];

    IniciarSliderViewController *controller = (IniciarSliderViewController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"MenuSlider"];

   [navigationController pushViewController:controller animated:YES];

1.- 实例化导航控制器。在绝大多数情况下通常是 rootviewcontroller,但不是全部

2.- 实例化情节提要。通常标记为 MainStoryboard

3.- 实例化您的特定视图控制器。你必须适应你的特殊情况

4.- 按你应该做的,因为你已经设置了你需要的一切

【讨论】:

如果应用程序启动并运行并且用户深入应用程序,您将如何处理?

以上是关于接收远程推送通知时打开视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

按下远程通知时打开视图控制器

打开推送通知时无法刷新我的 web 视图

打开接收推送通知的特定视图

当点击 FCM 推送通知时,如何在选项卡栏中打开特定的视图控制器?

按下推送通知时更改 tabbarindex

如何让你的推送通知打开某个视图控制器?