7

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.

  1. Authentifier mon application avec le webservice sur Connexion ViewController
  2. Auto déclencher un enchaînement à un CustomMenuViewController
  3. Attendez que le webservice de délai d'attente à distance
  4. 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:

  1. Authentifier mon application avec le webservice sur un CustomLoginViewController
  2. Segue Auto à un CustomMenuViewController
  3. immédiatement cliquer pour déclencher une Segue à CustomSubMenuViewController
  4. Cliquez de nouveau bouton pour déclencher une pop
  5. Attendez le webservice pour timeout à distance
  6. 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!

+0

Avez-vous exclu l'une des causes décrites à http://stackoverflow.com/a/7767160/1445366 et http://stackoverflow.com/q/1983620/1445366? –

+0

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

+0

Assurez-vous que vous ne le faites pas nul dans ViewDidDisappear ou ViewdidUnload – Navi

Répondre

0

Je pense que vous avez déjà résolu ce problème, mais j'ai rencontré la même chose. Et je pense que nous pourrions faire exactement la même chose comme l'utilisation de Facebook pour la connexion. Quoi qu'il en soit pour quelqu'un d'autre dans le futur cela pourrait être utile. Le problème que j'avais, c'est que je réaffectais UINavigationController quand je revenais de l'arrière-plan sur une condition d'échec.

Ainsi, vous pouvez essayer de placer un point d'arrêt autour de l'endroit où vous initialisez votre rootViewController pour UiNavigationController.

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

Hey, cela peut sembler vraiment basique, mais avez-vous alloué l'objet Navbar correctement, Peut-être que vous pouvez essayer de définir sa propriété aussi fort.Il peut-être afin qu'il soit désalloué avant l'heure.

Questions connexes