Error de matriz de controlador de navegación UINavigation controller array bug

Me estaba preguntando acerca de un error que encontré al hacer estallar mi UINavigationController. Cualquiera que sea el UIViewController en el que me encuentre actualmente, he implementado un controlador de cierre de sesión que vuelve al controlador raíz en mi UINavigationController. El código principal que hace esto se enumera aquí.

NSLog(@"Root Controller: %@", [[self.navigationController.viewController objectAtIndex:0] class]);
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];
NSLog(@"Root Controller: %@", [[self.navigationController.viewController objectAtIndex:0] class]);

Esto es lo que muestra la consola.

Root Controller: DetailViewController
Root Controller: (null)

Sin embargo, cuando cambio el código anterior a:

NSLog(@"Root Controller: %@", [[self.navigationController.viewController objectAtIndex:0] class]);
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];
NSLog(@"Root Controller: %@", [[self.navigationController.viewController objectAtIndex:0] class]);

Los resultados en la consola se muestran como:

Root Controller: DetailViewController
Root Controller: DetailViewController

Me molestó por un tiempo por qué cuando coloqué el UINavigationController en DetailViewController, no activó el método ViewWillAppear para actualizar mi información de inicio de sesión. Me parece que cuando salgo al índice 0, estoy accediendo a un objeto de matriz que está fuera de los límites, pero cuando salgo al índice 1, ahí es donde está el controlador raíz actual. ¿Alguien sabe cuál sería la causa de esto?

preguntado el 16 de mayo de 11 a las 18:05

Solo sugiero que, para abrir una pila de navegación hasta su controlador de vista raíz, hay un método más fácil [UINavigationController popToRootViewController]. -

1 Respuestas

Yo creo que self.navigationController se establece en cero después de self se saca de la pila.

Si ese es el caso, parece que aparecer en el controlador de vista en el índice 1 no se restablece self.navigationController a cero (ya sea porque self ¿Está el controlador de vista en el índice 1 o alguna llamada en viewWill | Did? Appear lo está configurando de nuevo).

contestado el 16 de mayo de 11 a las 22:05

Ahh por eso. El controlador de vista actual está en el índice 1. Eso lo explica. Gracias. - user756154

Si eso responde a su pregunta, no dude en hacer clic en la marca de verificación para marcarla como respondida. - Ed Marty

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.