Tengo una aplicación que tiene un UINavigationController
que empuja un UITabBarController
en 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 personalizada a su vez empuja a otro controlador de vista personalizado 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 el accidente de aplicación en su lugar:Llegar al controlador de vista que empujó el controlador de vista visible
// 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 mantuvo una matriz de todos los VC en la pila de navegación, por lo que el índice de la que actualmente visibles menos uno debe apuntar a la VC que empujó el actualmente visible VC a la vista. Más bien, parece apuntar a mi UITabBarController
:
-[UITabBarController rateCurrentEvent:]: unrecognized selector sent to instance
¿Qué pasa con eso y más importante aún, ¿cómo puedo obtener un puntero a la VC que empujó el VC Actualmente visisble a la vista?
EDITAR: Terminé creando un protocolo de delegado para el EventRatingAddViewController
y asignando el 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.
No es una respuesta a su pregunta, pero debe usar '.topViewController' en lugar de' .visibleViewController' ya que este último también podría ser un controlador de vista presentado modalmente que no tiene nada que ver con la pila de controladores de navegación. –
¿Has intentado iniciar sesión en 'myIindex' y en el índice de ese UITabBarController que obtienes? –
Buen punto sobre el topViewController. No hace una diferencia en este caso, ya que no tengo VCs modales en mi aplicación. El VC visible obtiene el índice 2, UITabBarController 1. – mvexel