¿Por qué el uso de setViewControllers elimina todo de la barra de navigation de UINavigationController?

Este es el problema. Utilizo el siguiente código en UINavigationController para intercambiar rootViewController . Necesito poder cambiar el rootViewController entre varias pantallas diferentes y permitir al usuario profundizar en cada pantalla (que es obviamente por qué necesito el controller de navigation):

 SomeViewController *tmp = [[SomeViewController alloc] initWithNibName:@"SomeViewController" bundle:nil]; NSArray * viewControllers = [self viewControllers]; NSArray * newViewControllers = [NSArray arrayWithObjects:tmp, nil]; [self setViewControllers:newViewControllers]; 

Ahora, al leer la reference de class para UINavigationController , vi que para la propiedad "viewControllers" dice: "el controller de la vista raíz está en el índice 0 de la matriz, el controller de la vista trasera está en el índice n-2 y el controller superior está en el índice n-1, donde n es el número de elementos en la matriz ".

Cuando imprimo una count de mi array viewControllers allí, obtengo 1, el rootViewController actual. ¿No debería haber algo allí para el controller superior (que supongo que es la barra de navigation)?

Tan pronto como uso setViewControllers con la nueva vista, todo en mi barra de navigation desaparece. Agregaré que tengo un button izquierdo y derecho, así como un button de título personalizado que se inicializan y agregan a la barra de navigation en el método init y que han estado funcionando bien hasta que desaparecieron en mí.

Cualquier ayuda sería muy apreciada.

Debido a que UINavigationController gestiona una stack (matriz) de controlleres de vista, si le proporcionas una stack, desasignaría y eliminaría la stack antigua. Si necesita agregar varios controlleres de vista, puede usar -pushViewController:animated:completion: con el set animado en NO para todos excepto el último controller de vista.

Debido a que la stack que le dio solo contenía un controller de vista, -count imprimiría 1 y, de hecho, sería el controller de vista superior.