1 votes

queston liée à popToViewController

Mon Secondview est BController *bview. Dans cette vue, il y a un bouton de retour

en cliquant sur le bouton de retour

-(IBAction)done:(id)sender
{
AController *aview= [[AController alloc] initWithNibName:@"AController" bundle:[NSBundle mainBundle]];

    NSArray *array = [self.navigationController popToViewController: aview animated:YES];

}

AController *aview n'est rien d'autre que ma première vue, ou plutôt ma première vue.

Mais lorsque je clique sur le bouton "retour", je reçois une exception.

** Terminer l'application à cause d'une exception non prise 'NSInternalInconsistencyException', raison : 'Tried to pop to a view controller that doesn't exist.' 2010-03-18 15:53:05.948 IChitMe [5072:207] Stack : ( 820145437, 837578260, [ ] 814928571, [ ] 862794216, 54911, 819902607, 861951876, [ ] 819902607, 861951876, 861951724, [ ] [ ] 861953932, [ ] 861945748, 861927312, 861925524, 858687888, 819893547, [ ] 858682228, [ ] [ ] 10069, 9964 ) terminaison appelée après avoir lancé une instance de 'NSException'

22voto

mihir mehta Points 8182

Utilisation

[self.navigationController popViewControllerAnimated:YES];

OU

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];

6voto

Vladimir Points 4045

NavigationController gère une pile de UIViewControllers. C'est comme une pile de cartes. Lorsque vous appelez l'une des méthodes pop :

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated
- (UIViewController *)popViewControllerAnimated:(BOOL)animated

vous retirez certains contrôleurs de la partie supérieure et vous montrez le contrôleur correspondant :

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated  

pops au premier contrôleur (c'est-à-dire le plus bas dans la pile), il est appelé "Root" (racine).

- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated 

pops au viewController spécifié, et noter qu'il devrait déjà se trouver dans la pile !

- (UIViewController *)popViewControllerAnimated:(BOOL)animated  

passe au contrôleur précédent (en dessous du contrôleur actuel).

Ainsi, si vous souhaitez afficher votre AController *aview à l'aide de la méthode pop... du navigationController, il devrait déjà se trouver dans la pile du navigationController - c'est-à-dire viewControllers de navigationController :

@property(nonatomic, copy) NSArray *viewControllers

par exemple :

aController = [[AController alloc] initWithNibName:@"AController" bundle:[NSBundle mainBundle]];
bController = [[BController alloc] initWithNibName:@"BController" bundle:[NSBundle mainBundle]];
navigationController = [[UINavigationController alloc] initWithRootViewController:aController]; 
[navigationController pushViewController:bController];

maintenant bController est affiché et vous pouvez appeler :

[navigationController popToViewController:aController animated:YES];

1voto

simon meier Points 11

Il existe un tutoriel intéressant pour les développeurs allemands :

http://bedifferently.wordpress.com/2012/01/15/xcode-4-tutorial-uinavigationcontroller/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X