update que para necesario instale instalado este esta esperando controlador apple iphone uinavigationcontroller

iphone - para - Accede al controlador de vista que empujó el controlador de vista visible



el controlador necesario para este iphone no esta instalado (1)

Tengo una aplicación que tiene un UINavigationController que empuja a UITabBarController a la vista. Este UITabBarController tiene cuatro pestañas, una de las cuales muestra un UIViewController personalizado, una instancia de EventInformationViewController . Un botón en este controlador de vista personalizado a su vez empuja a otro controlador de vista personalizada EventRatingAddViewController a la vista. Una acción en este controlador de vista debe invocar un método en la instancia EventInformationViewController . El siguiente código hace que la aplicación falle en su lugar:

// get the index of the visible VC on the stack int myIindex = [self.navigationController.viewControllers indexOfObject:self.navigationController.visibleViewController]; // get a reference to the previous VC EventInformationViewController *prevVC = (EventInformationViewController *)[self.navigationController.viewControllers objectAtIndex:myIindex - 1]; [prevVC performSelector:@selector(rateCurrentEvent:)];

Pensé que la propiedad viewControllers conservaba una matriz de todos los VC en la pila de navegación, por lo que el índice, el menos visible uno, debería apuntar al VC que empujaba al VC actualmente visible a la vista. Por el contrario, parece apuntar a mi UITabBarController :

-[UITabBarController rateCurrentEvent:]: unrecognized selector sent to instance

¿Qué pasa con eso y, lo que es más importante, cómo obtengo un puntero al VC que empuja el VC visualizable actualmente a la vista?

EDITAR: Terminé creando un protocolo de delegado para EventRatingAddViewController y asignando EventInformationViewController como delegado. Esto funciona bien, todavía estoy pensando que debería haber una manera de acceder al VC que empuja a través de la pila de navegación.


Estoy bastante seguro de que UITabBarController efectivamente presionó su controlador de vista actual, pero que lo que está buscando es el controlador de vista de una de las pestañas de este UITabBarController , el controlador de vista que estaba visible en el UITabBarController en el momento de este UITabBarController empujó su controlador de vista en la pila de navegación. Posiblemente este UITabBarController empujó su controlador de vista en la pila, porque el controlador de vista de la pestaña visible lo indicó, por lo que sería algo como esto: [self.tabBarController.navigationController pushViewController:someViewController]; .

La forma de averiguar qué controlador de vista se mostró en el UITabBarController en el momento en que su controlador de vista se UITabBarController en la pila, es usar la propiedad .selectedViewController , de modo que resulte algo como esto:

// get the index of the visible VC on the stack int currentVCIndex = [self.navigationController.viewControllers indexOfObject:self.navigationController.topViewController]; // get a reference to the previous VC UITabBarController *prevVC = (UITabBarController *)[self.navigationController.viewControllers objectAtIndex:currentVCIndex - 1]; // get the VC shown by the previous VC EventInformationViewController *prevShownVC = (EventInformationViewController *)prevVC.selectedViewController; [prevShownVC performSelector:@selector(rateCurrentEvent:)];