J'ai un délégué/gestionnaire que j'ai implémenté sur mes UIViewControllers pour gérer les délais d'attente vers un webservice distant. Lorsqu'une demande est faite à mon webservice, et un délai d'attente code http est renvoyé, le délégué est appelé et effectue les opérations suivantes:self.navigationController est la deuxième fois que ViewController est chargé
UINavigationController *navController = self.navigationController;
if (navController) {
[navController popToRootViewControllerAnimated:YES];
} else {
NSLog(@"navController is null/nil");
}
Si je fais les étapes suivantes, navController
est correctement instancié et l'action popToRootViewController
se produit.
- Authentifier mon application avec le webservice sur Connexion ViewController
- Auto déclencher un enchaînement à un CustomMenuViewController
- Attendez que le webservice de délai d'attente à distance
- Cliquez pour déclencher une Segue à CustomSubMenuViewController
Maintenant, si je fais les étapes suivantes, la clause else dans le bloc de code ci-dessus est déclenchée car pour certaines raisons navController n'est pas défini correctement:
- Authentifier mon application avec le webservice sur un CustomLoginViewController
- Segue Auto à un CustomMenuViewController
- immédiatement cliquer pour déclencher une Segue à CustomSubMenuViewController
- Cliquez de nouveau bouton pour déclencher une pop
- Attendez le webservice pour timeout à distance
- Cliquez pour déclencher une segue à la même CustomSubMenuViewController
Ma question est la suivante: pourquoi, lorsque je charge un ViewController pour la deuxième fois, self.navigationController renvoie null?
La pile d'appel dans l'exemple ci-dessus devrait ressembler à ceci: NavigationController -> CustomLoginViewController -> CustomMenuViewController -> CustomSubMenuViewController
Merci
MISE À JOUR: ont encore fait aucun progrès sur cette question!
Avez-vous exclu l'une des causes décrites à http://stackoverflow.com/a/7767160/1445366 et http://stackoverflow.com/q/1983620/1445366? –
Oui - moi-même.navigationController est accessible lorsque le viewController est chargé pour la première fois, il n'est null lorsque vous le quittez, puis essayez d'y revenir successivement. – doug
Assurez-vous que vous ne le faites pas nul dans ViewDidDisappear ou ViewdidUnload – Navi