J'ai une application qui a un UINavigationController
qui affiche un UITabBarController
. Ce UITabBarController
a quatre onglets, dont l'un montre un UIViewController
personnalisé, une instance de EventInformationViewController
. Un bouton de ce contrôleur de vue personnalisé enfonce à son tour un autre contrôleur de vue personnalisé EventRatingAddViewController
. Une action dans ce contrôleur de vue doit appeler une méthode dans l'instance EventInformationViewController
. Le code suivant fait l'accident d'application à la place:Accédez au contrôleur de vue qui a poussé le contrôleur de vue 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:)];
Je pensais que la propriété viewControllers a gardé un tableau de tous les circuits virtuels sur la pile de navigation, de sorte que l'indice d'une moins un actuellement visible doit pointer vers le VC qui a poussé la VC actuellement visible dans la vue. Au contraire, il semble pointer vers mon UITabBarController
:
-[UITabBarController rateCurrentEvent:]: unrecognized selector sent to instance
Qu'est-ce avec cela et plus important encore, comment puis-je obtenir un pointeur vers le VC qui a poussé le VC actuellement visisble en vue?
EDIT: J'ai fini par créer un protocole de délégué pour le EventRatingAddViewController
et en affectant le EventInformationViewController
en tant que délégué. Cela fonctionne bien - encore je pense qu'il devrait y avoir un moyen d'accéder à la VC de poussée à travers la pile de navigation.
Pas une réponse à votre question, mais vous devriez utiliser '.topViewController' au lieu de' .visibleViewController' car ce dernier pourrait également être un contrôleur de vue présenté de façon modale qui n'a rien à voir avec votre pile de contrôleur de navigation! –
Avez-vous essayé d'enregistrer 'myIindex' et l'index de ce UITabBarController vous obtenez? –
Bon point sur le topViewController. Ne fait pas de différence dans ce cas, car je n'ai pas de VC modale dans mon application. Le VC visible obtient l'index 2, le UITabBarController 1. – mvexel