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

时间:2012-11-16 12:39:02

标签: objective-c ios apple-push-notifications

我正在使用故事板,我想在用户收到远程推送通知时始终打开相同的视图,即使应用程序处于后台或打开。我需要呈现的视图是在故事板中设置初始视图控制器之后的四个视图。我看过这篇文章:

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是在故事板中设置为初始视图的控制器。

非常感谢。

2 个答案:

答案 0 :(得分:19)

请尝试以下代码:

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

答案 1 :(得分: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.- Instantiate de navigationController。通常是绝大多数情况下的rootviewcontroller,但不是全部

2.-实例化故事板。 Usuarlly标记为MainStoryboard

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

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