example bar ios objective-c uiviewcontroller uinavigationcontroller segue

ios - bar - set root view controller programmatically swift



Sigue recibiendo "llamadas no balanceadas para comenzar/finalizar transiciones de apariciĆ³n para el error<ViewController>" (6)

Tengo una aplicación que casi funciona perfectamente. Así es como está estructurada mi aplicación:

6 Controladores de vista totales en el guión gráfico. Los primeros 3 controladores de vista son los más importantes. El controlador de vista inicial tiene botones para "Iniciar sesión" y "Registrarse". El botón "Iniciar sesión" presenta de manera modal un Controlador de vista de inicio de sesión y el botón "Inscripción" presenta de manera modal un Controlador de vista de registro.

El Controller View Controller tiene 3 campos para nombre de usuario, contraseña y correo electrónico y luego un botón "enviar". El botón de enviar envía los datos a mi servidor web y si todo se envía correctamente, llama al método "performSegueWithIdentifier" en sí mismo.

Aquí está la declaración:

[self performSegueWithIdentifier:@"superSegue" sender:self];

Pasé 2 horas esta noche tratando de hacer que la llamada al método anterior funcione y finalmente funciona. Para que funcione, tuve que seleccionar mi Controller View Controller en el guión gráfico e ir a Editor> Embed In> Navigation Controller (Si mal no recuerdo tuve que hacer esto porque el controlador de vista de registro se presenta de forma modal). Luego, arrastré desde el botón Enviar de mi Controlador de vista de inscripción hasta el Controlador de vista al que quiero presionar y seleccioné Empujar y luego ingresé un nombre de identificador.

De todos modos, todo lo anterior funciona perfectamente bien hasta que trato de usar el botón Atrás en el Controlador de Vista al que presionamos para usar la llamada al método. Si toco el botón Atrás, se pasa a una pantalla negra al 90% con una barra de navegación en blanco en la parte superior con un botón Atrás y, por supuesto, ese botón Atrás no hace nada.

Este es el error que obtengo en la consola:

Unbalanced calls to begin/end appearance transitions for <VerificationViewController: 0x14ed1bb0>

El Controlador Ver de Verificación es el Controlador de Vista que empuja el Controlador de Vista de Registro a través del método performSegueWithIdentifier.

¿Alguien sabe cómo puedo solucionar este error?

He incluido una captura de pantalla a continuación de cómo se ve mi guión gráfico en xcode. Hay un controlador de vista que he codificado pero que todavía no está conectado y que no debería marcar la diferencia, de modo que puede ignorar View Controller a la derecha de Login VC.


En mi caso, era una subclase de UITabBarController con un método setSelectedIndex: sobrecargado que realiza la transición con una animación. Descubrí que debe llamarse lo siguiente antes de que comience la animación:

[sourceVC viewWillDisappear:YES]; [destinationVC viewWillAppear:YES];

Y lo siguiente en el bloque de finalización:

if (finished) { [sourceVC viewDidDisappear:YES]; [destinationVC viewDidAppear:YES]; [super setSelectedIndex:selectedIndex]; }

El problema aún puede ocurrir si ocurren varios cambios de SelectedIndex antes de que finalicen las animaciones.


Resolví este problema al envolver esto.

dispatch_async(dispatch_get_main_queue()) { //call your performSegueWithIdentifier in here }


Encontré la respuesta esta mañana en otra pregunta de . La respuesta se puede encontrar aquí .

Cuando originalmente configuré Push Segue, hice clic y arrastré desde un botón, y también estaba llamando al método performSegueWIthIdentifier dentro de la implementación del método IBAction de ese botón. Esto provocaba que se ejecutaran 2 segmentos de inserción idénticos al presionar el botón. Acabo de dejar mi llamada de método en IBAction, eliminé el viejo segue de inserción, y creé un nuevo cambio de inserción solo esta vez que hice clic y arrastré de todo el Controlador de Vista en lugar de su botón.


En mi caso, esta advertencia fue causada al llamar a popToRootViewController de UINavigationController mientras se mostraba la vista modal. Cuando moví popToRootViewController después de la vista modal descartada, la advertencia deja de aparecer.


Motivo del error : este mensaje se muestra si está presionando / presentando otro controlador de vista desde el método viewWillAppear, loadView, init o viewDidLoad del controlador de vista actual.

Solución : mueva su código de presentación / presentación al método viewDidAppear para resolver el problema

La razón es: en viewDidLoad no todas las animaciones de fantasía ya se han terminado, mientras que en viewDidAppear todo está hecho.


Lo trabajé y es bueno para mí Razón de error: Este mensaje se muestra si está presionando / presentando otro Controlador de vista desde TabBarController, Solución: configure viewController.modalPresentationStyle = .overCurrentContext , luego presente viewController topViewController.present(vc, animated: true, completion: nil)