7

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.

  1. autenticare la mia app con il webservice su un accesso ViewController
  2. Auto innescare un segue ad un CustomMenuViewController
  3. Attendere che il webservice al timeout remoto
  4. 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:

  1. autenticare la mia app con il webservice su un CustomLoginViewController
  2. Auto segue ad un CustomMenuViewController
  3. Immediatamente fare clic per innescare un segue per CustomSubMenuViewController
  4. Fare clic sul pulsante indietro per innescare un pop
  5. Attendere il webservice per timeout in remoto
  6. 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!

+0

Vi siete escluso qualsiasi delle cause descritte ai http://stackoverflow.com/a/7767160/1445366 e http://stackoverflow.com/q/1983620/1445366? –

+0

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

+0

assicuratevi che non lo rendiate nullo in ViewDidDisappear o ViewdidUnload – Navi

risposta

0

Penso che potresti aver già risolto questo problema, ma ho incontrato la stessa identica cosa. E penso che potremmo fare esattamente la stessa cosa come usare Facebook per il login. Ad ogni modo per qualcun altro in futuro potrebbe essere utile. Il problema che ho avuto era che stavo di nuovo allocando UINavigationController di nuovo quando tornava dallo sfondo in una condizione di errore.

Quindi, ciò che si può fare è provare a mettere un punto di interruzione intorno al punto in cui si inizializza il rootViewController per UiNavigationController.

[[UINavigationController alloc] 
     initWithRootViewController:viewController]; and make sure that you do re-initailise your UINavigationController if you have already done it. 
2

Ehi, questo potrebbe sembrare davvero semplice ma, hai assegnato correttamente l'oggetto di Navbar, forse puoi provare a impostarne la proprietà come forte. Forse è così che viene deallocato prima del tempo.

Problemi correlati