Контроллер открытого представления при получении удаленного Push-уведомления

Я использую раскадровку и хочу всегда открывать одно и то же представление, когда пользователь получает удаленные push-уведомления, даже если приложение находится в фоновом режиме или открыто. Представление, которое мне нужно представить, — это четыре представления после начального контроллера представления, установленного в раскадровке. Я читал эти сообщения:

Как я могу показать модальное представление в ответ на уведомление как новое окно? (нет родительского vc)

Открыть определенную вкладку/представление, когда пользователь получает push-уведомление

Итак, вот мой код:

- (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 — это контроллер представления, установленный как начальный в раскадровке.

Большое спасибо.


person theomen    schedule 16.11.2012    source источник
comment
Предположим, HomeViewController — это начальный контроллер представления в Storyboard, и после нажатия кнопки вы теперь находитесь в SecondViewController по методу push. Теперь вы получаете Push-уведомление. Вы хотите отправить NotificationViewController или представить его модально?   -  person Paramasivan Samuttiram    schedule 16.11.2012
comment
Модально, поэтому я не уверен, что понимаю ваше объяснение, вы предлагаете подтолкнуть стек, пока я не получу notificacionViewController? Спасибо   -  person theomen    schedule 16.11.2012


Ответы (2)


Пожалуйста, попробуйте следующий код:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    UINavigationController *navController = (UINavigationController *)self.window.rootViewController;
    NotificationViewController *notificationViewController = [[NotificationViewController alloc] init];
    [navController.visibleViewController.navigationController pushViewController:notificationViewController];    
}
person Paramasivan Samuttiram    schedule 16.11.2012
comment
Большое спасибо. Это дает мне эту ошибку: «Нет видимого @interface для UINavigationController» объявляет селектор «pushViewController:» для строки [navController.visibleViewController.navigationController pushViewController:notificationViewController]; - person theomen; 16.11.2012
comment
Пожалуйста, попробуйте это. [navController.visibleViewController.navigationController pushViewController: анимация notificationViewController: YES]; - person Paramasivan Samuttiram; 16.11.2012

Мой код немного отличается от ответов, которые я видел. Дело в том, что единственный код, который у меня работает, это следующий:

    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.- Нажмите как следует, потому что вы установили все, что вам нужно

person Alex Moleiro    schedule 16.01.2014
comment
Как бы вы это сделали в случае, если приложение запущено и работает, а пользователь находится глубоко внутри приложения? - person Ben Affleck; 03.10.2015