7

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

如何将响应通知的模式视图显示为新窗口?(没有父VC)

当用户收到推送通知时打开特定的选项卡/视图

所以这是我的代码:

- (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 是在情节提要中设置为初始的视图控制器。

非常感谢。

4

2 回答 2

19

请尝试以下代码:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    UINavigationController *navController = (UINavigationController *)self.window.rootViewController;
    NotificationViewController *notificationViewController = [[NotificationViewController alloc] init];
    [navController.visibleViewController.navigationController pushViewController:notificationViewController];    
}
于 2012-11-16T13:18:11.940 回答
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.-按你应该做的,因为你已经设置了你需要的一切

于 2014-01-16T11:47:08.900 回答