2

Je suis un développeur d'applications iPhone relativement nouveau donc ma connaissance est un peu sommaire, alors s'il vous plaît pardonnez-moi si c'est une question triviale.popToRootViewController plantant

I ont une application de navigation qui perce entre les vues de table en appelant pushViewController sur l'objet NavigationController

Je une section particulière qui pousse de nouveaux contrôleurs de vue séquentiellement que l'utilisateur passe par l'interface. Les contrôleurs de vue sont tous sous-classés à partir de UIViewController.

Tout fonctionne bien jusqu'à ce qu'il arrive à la fin, où l'idée est que l'utilisateur appuie sur un bouton "Terminer" et est retourné au contrôleur de vue racine (menu principal).

donc sur la presse bouton que j'appelle:

[[self navigationController] popToRootViewControllerAnimated:YES]; 

Et il se bloque.

Je suis un peu inquiet cela pourrait être un gros problème car cela a fonctionné à un certain point mais il est maintenant toujours défaillant.

Quelqu'un peut-il donner des idées/conseils?

+0

Y at-il trace de la pile? Savez-vous de quoi il s'agit? –

+0

Pardonnez ma noobishness mais comment pourrais-je obtenir la trace de la pile?: s I Appuyez sur show console et il ne donne pas vraiment beaucoup ... – qui

+0

tapez bt à la console gdb pour faire marche arrière la pile – slf

Répondre

3

Quelques suggestions:

  • Avant d'appeler popToRootViewControllerAnimated: confirment que le RootViewController existe vraiment. S'il est mort quelque part le long de la ligne, l'appel de la méthode provoquera un crash.
  • Vérifiez les méthodes – viewWillDisappear: et – viewDidDisappear: de votre dernière vue pour vous assurer que vous ne faites pas quelque chose de dangereux là-bas.
  • Vous ne savez pas si l'ouverture d'une vue entraîne son désallocation, mais vérifiez la méthode dealloc des vues et de leurs contrôleurs pour vous assurer que vous ne relâchez pas quelque chose.
  • Une erreur que j'ai beaucoup vue est de libérer des objets dans le modèle de données des contrôleurs. Lorsqu'un autre contrôleur (dans ce cas le RootViewController) tente d'accéder au modèle de données, l'application se bloque.

Il semble que vous ayez besoin de comment utiliser le débogueur Xcode. Tapez dans le débogueur dans l'aide de Xcode pour obtenir des pointeurs.

0

Comme d'autres l'ont commenté, la première étape consiste à exécuter ce mode de débogage et à déterminer où et pourquoi vous vous plantez.

Le type d'incident le plus courant consiste à utiliser un objet désalloué (EXEC_BAD_ACCESS). Avez-vous exécuté l'analyseur statique? Conservez-vous correctement vos références d'objet?

1

Vous ne devriez pas utiliser popToRootViewController dans votre vueWillDisappear. A la place, si vous voulez faire apparaître le contrôleur de la racine en appuyant sur le bouton de retour, vous devez remplacer le bouton de retour par le vôtre et y ajouter une action. Essayez de faire quelque chose comme ::

UIBarButtonItem *back = [[UIBarButtonItem alloc] initWithTitle:@"back" 
                   style:UIBarButtonItemStyleBordered 
                   target:self 
                   action:@selector(goBack:)]; 
self.navigationItem.leftBarButtonItem = back; 

puis gérer l'action ::

- (void) goBack:(id)sender 
{ 
    // pop to root view controller 
    [self.navigationController popToRootViewControllerAnimated:YES]; 

} 
Questions connexes