2015-03-04 1 views
1

У меня есть TabBarController в качестве точки входа приложения. После получения Локальное уведомление, я хочу отобразить конкретный UIViewController.Как получить делегат приложения для отображения определенного UIViewController после PushNotification

В зависимости от фактического состояния приложения (самый передний/не передний, не работает), я могу поймать push-уведомление, например. application:willFinishLaunchingWithOptions: или application:didReceiveLocalNotification: в appdelegate.

Однако я не в состоянии управлять открыть конкретную UIViewController в этой точке (что, кстати, не один из tabbarcontroller.selectedIndexes).

Я пробовал различные вещи, например. presentViewController:

Today*today = [[Today alloc] init]; 
[[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentViewController:today animated:NO completion:nil]; 

оставив Ошибка:

Warning: Attempt to present <Today: 0x7fcb91ed5a40> on <UITabBarController: 0x7fcb91c79810> whose view is not in the window hierarchy!

Сообщения здесь указывают использовать [self.window makeKeyAndVisible]; перед вызовом presentViewController: та же ошибка!

Дальнейшие сообщения [thisOne] показывают, что эта ошибка может быть опущена, поставив presentViewController в viewDidAppear: однако, это не представляется возможным в AppDelegate, где я поймать местное уведомление ...

Даже вызов SEGUE не представляется возможным, так как мне кажется, что View Controller не загружена в данный момент уже ...

Некоторые люди, указывающие, что вызов UIViewController из AppDelegate не представляется возможным в аль Это верно?

У меня нет идей, есть ли у вас какие-либо меры ...?!?

+0

Проверьте этот ответ: * HTTP : //stackoverflow.com/a/29773513/4173671* Надеюсь, это поможет. –

ответ

0

Я нашел решение, которое работает для меня:

Убедитесь, что ваш UIViewController (здесь сегодня) встраивается в NavigationController.

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { 

Today* today=[[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"Today"]; 

UINavigationController *navigationController=[[UINavigationController alloc] initWithRootViewController:today]; 
self.window.rootViewController =nil; 
self.window.rootViewController = navigationController; 
[self.window makeKeyAndVisible]; 

}

Надеется, что это помогает ...

0

Если вы хотите получить какой-либо другой UIViewController, а не только rootViewController:

UIWindow *window=[UIApplication sharedApplication].keyWindow; 
UIViewController *root = [window rootViewController]; 

UIStoryboard *storyboard = root.storyboard; 
CustomViewController *vcc =(CustomViewController *) [storyboard instantiateViewControllerWithIdentifier:@"storyBoardID"]; 
Смежные вопросы