Lanzamiento de un viewController específico en respuesta a una notificación push alejada

Estoy creando una aplicación cuyo storyboard fluye como la siguiente image:

guión gráfico

Cuando un usuario inicia session desde "Sysalert View Controller", se lleva a "Message List View Controller" donde hago una connection NSURLC para cargar algunos JSON en la tabla. Cuando un usuario toca una fila en la tabla, se lleva a "Detalles de post" que muestra información más detallada para ese post.

Cuando un usuario inicia la aplicación desde una notificación push, independientemente del estado de la aplicación antes del inicio, quiero que la aplicación cargue los datos de la "Lista de posts" de mi server y luego les muestre el post que acaba de ser enviado al dispositivo .

Sé que necesito usar didFinishLaunchingWithOptions para decirle a la aplicación que reaccione a la notificación push pero cómo configuro la jerarquía de vista para que el controller de vista "Lista de posts" cargue sus datos y luego empuje el controller de vista "Detalles de post" a la stack por el post apropiado

Esencialmente, este tipo de imita el comportamiento de las aplicaciones de Mensajes o Correo. Cuando abrir con una notificación te lleva a un controller de vista para ese post, pero puedes volver a moverte en la jerarquía como si hubieras lanzado la aplicación desde el viewController inicial y atravesado a través de viewControllers.

Es posible hacer lo que describes, pero no lo recomendaría.

Frist, coloca un controller de vista desconectado con la vista que quieras en el guión gráfico, otorga al controller de vista un identificador, algo así como "Vista de notificación de My Push"

En didFinishLaunchingWithOptions: puede llegar a rootViewController desde el delegado de la aplicación. Este controller será el controller de navigation. Con el controller de navigation, puede presionar un nuevo controller de vista en la parte superior de la stack. Para crear el nuevo controller de vista, instancie el controller de vista con el identificador "Mi vista de notificación de inserción".

 UINavigationController *navController = (UINavigationController *)self.window.rootViewController; UIViewController *notificationController = [navController.storyboard instantiateViewControllerWithIdentifier:@"My Push Notification View"]; [navController pushViewController:notificationController animated:YES]; 

Creo que querrás usar algo como -presentViewController:animated:completion: para mostrar una vista modal en lugar de interrumpir la stack de navigation.

 UIViewController *rootController = (UIViewController *)self.window.rootViewController; UIViewController *notificationController = [rootController.storyboard instantiateViewControllerWithIdentifier:@"My Push Notification View"]; [rootController presentViewController:notificationController animated:YES completion:NULL]; 

Intente Esto que utilicé en una de mis aplicaciones, Usuario una variable en el delegado de la aplicación como un global

  ex: BOOL gotNotifcation; -(void)application:(UIApplication*)app didReceiveRemoteNotification:(NSDictionary *)userInfo { NotificationsViewController *notificationobject = [[NotificationsViewController alloc]init]; [self.navigationController pushViewController:notificationobject animated:YES]; gotNotifcation = YES; } 

En NotificationsViewController para la acción del button Atrás si es un button personalizado

 -(void)gotoback { AppDelegate *delegate =(AppDelegate *)[UIApplication shanetworkingApplication].delegate; if(delegate.gotNotifcation) { delegate.gotNotifcation = NO; MessageListController *feed = [[MessageListController alloc] init]; [self.navigationController pushViewController:feed animated:NO]; } else { [self.navigationController popViewControllerAnimated:NO]; } }