Ho un delegato/gestore che ho implementato sul mio UIViewControllers per gestire i timeout a un webservice remoto. Quando viene effettuata una richiesta al mio webservice, e un codice http timeout viene restituito, il delegato si chiama ed esegue il seguente:self.navigationController è nil seconda volta ViewController è caricato
UINavigationController *navController = self.navigationController;
if (navController) {
[navController popToRootViewControllerAnimated:YES];
} else {
NSLog(@"navController is null/nil");
}
Se faccio le seguenti operazioni, navController
viene creata un'istanza correttamente e si verifica l'azione popToRootViewController
.
- autenticare la mia app con il webservice su un accesso ViewController
- Auto innescare un segue ad un CustomMenuViewController
- Attendere che il webservice al timeout remoto
- Clicca per innescare un segue per CustomSubMenuViewController
Ora, se faccio i seguenti passi, viene attivata la clausola else nel blocco di codice sopra perché per alcuni motivi navController non viene impostato correttamente:
- autenticare la mia app con il webservice su un CustomLoginViewController
- Auto segue ad un CustomMenuViewController
- Immediatamente fare clic per innescare un segue per CustomSubMenuViewController
- Fare clic sul pulsante indietro per innescare un pop
- Attendere il webservice per timeout in remoto
- Fare clic per attivare un seguito allo stesso CustomSubMenuViewController
La mia domanda è: perché quando carico un ViewController per la seconda volta, self.navigationController restituisce null?
Lo stack di chiamate nell'esempio di cui sopra dovrebbe essere simile a questo: NavigationController -> CustomLoginViewController -> CustomMenuViewController -> CustomSubMenuViewController
Grazie
UPDATE: Ancora non hanno fatto alcun progresso su questo tema!
Vi siete escluso qualsiasi delle cause descritte ai http://stackoverflow.com/a/7767160/1445366 e http://stackoverflow.com/q/1983620/1445366? –
Sì - auto.navigationController è accessibile quando il ViewController viene caricato per la prima volta, è solo nullo quando ci si allontana da esso e quindi si tenta di tornare ad esso in successione. – doug
assicuratevi che non lo rendiate nullo in ViewDidDisappear o ViewdidUnload – Navi