iphone - recuperar - Llamadas no balanceadas para comenzar/finalizar transiciones de aparición para<FirstViewController: 0x2a2c00>
recuperar notificaciones iphone (24)
Tengo este problema cuando simulo mi aplicación, no es un error o una advertencia, pero aparece en mi consola, ¿alguien ha experimentado esto antes?
''Llamadas no balanceadas para comenzar / finalizar transiciones de aparición para''
Dice que una animación se inicia antes de que no se realice la última animación relacionada. Entonces, ¿estás sacando cualquier controlador de vista antes de presionar el nuevo? ¿O puede estar apareciendo en la raíz? en caso afirmativo, intente hacerlo sin animación, es decir, [self.navigationController popToRootViewControllerAnimated:NO];
Y mira si esto resuelve el problema. En mi caso, esto funcionó.
Asegúrese de que no se olvide de ver en -WindowAppear, -viewDidAppear, -viewDidLoad, -viewWillDispepear, -viewDidDisappear para llamar al método súper apropiado en su sobrecarga de esos métodos. Por ejemplo, en mi caso, no coincidí con el nombre del método como este:
-(void)viewDidAppear
{
[super viewDidDisappear];
//some code staff
..
}
Observe que los métodos de aparecer y desaparecer no coinciden
Debes ejecutar tu código en diferente ciclo para evitar esto
double delayInSeconds = 0.1;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
// Put your code here
[self presentViewController:self.yourModalVC animated:YES completion:nil];
});
En mi caso sucedió cuando [self performSegueWithIdentifier:@"SomeIdentifier" sender:self];
dentro del método viewDidLoad
un elemento viewDidLoad
.
viewDidAppear
método viewDidAppear
resolvió el problema.
La razón es muy probable que en viewDidLoad
no se hayan terminado todas las animaciones de lujo, mientras que en viewDidAppear
todo está hecho.
En mi caso, estaba NSData
de NSURL
dentro del método '' viewDidLoad
''.
En mi caso, este error ocurre cuando haces clic en dos pestañas en una vista de tabla muy rápido.
El resultado causa un nombre de título incorrecto, el botón Atrás desaparece. Alguien mencionó que cuando presionas una vista, set animated:NO
. El error desaparecerá pero aún provoca un comportamiento extraño. Empuja dos vistas, luego necesita retroceder dos veces para volver a la pantalla de vista de tabla.
Método que probé para resolver este problema:
agregar BOOL cellSelected;
en viewWillAppear
cellSelected = YES;
en el delegado didselectcell if (cellSelected){cellSelected = NO; do action ; }
if (cellSelected){cellSelected = NO; do action ; }
Esto ayuda a evitar hacer clic en dos celdas diferentes muy rápido.
Esta fue una pregunta difícil para mí: he anulado
override func shouldAutomaticallyForwardRotationMethods() -> Bool {
return true
}
sin anular:
override func shouldAutomaticallyForwardAppearanceMethods() -> Bool {
return true
}
en mi controlador de navegación raíz de la ventana. luego, un controlador de navegación infantil se quejó al presionar a otro controlador de vista con la advertencia mencionada anteriormente. La advertencia no fue la peor, el gran problema fue que ya no se llamaba al delegado del controlador de navegación infantil. weired.
La situación puede ocurrir si está agregando una vista con un controlador de vista modal como una sub-vista. Mejor usar:
-(void) viewDidAppear:(BOOL)animated {
[self presentViewController:self.yourModalVC animated:YES completion:nil];
}
Básicamente se trata de decir que el ciclo de vida de la vista no está optimizado para esos ViewControllers que estás tratando de mostrar en ese momento.
Obtuve este problema porque estaba llamando a un UIPrintInteractionController desde un viewController sin UITabbar y sin UINavigationBar. Parece que UIPrintInteractionController no obtuvo el printInteractionControllerParentViewController correcto. Implementar el método en el delegado y devolver el rootViewController actual funcionó para mí.
- (UIViewController*)printInteractionControllerParentViewController:(UIPrintInteractionController*)printInteractionController;
Por lo que vale, obtuve el mismo error cuando no [super viewDidLoad:animated]
una llamada a [super viewDidLoad:animated]
en mi override viewDidLoad
.
Puede ejecutar esto si intenta cerrar un UIViewController antes de que termine de cargarse.
Tenía este mensaje en la consola y me estaba enfocando completamente en el UIViewController que presentaba el nuevo UIViewController, sin éxito. Finalmente descubrí que el problema estaba en que el UIViewController que estaba presentando se descartaba porque el usuario no había iniciado sesión en su cuenta.
Espero que esto ayude a alguien.
También obtuve esto en
[self dismissModalViewControllerAnimated:YES];
Cambié el YES
a un NO
, y eso resolvió el problema.
También tuve este problema cuando toqué un botón de un NIB. Resultó que había conectado accidentalmente el botón para enviar un evento a dos métodos de IBAction, cada uno de los cuales realizaba un pushViewController: animado:
Tenía un poco de lógica implementada para esperar a empujar el UIViewController
hasta que se UIViewController
descargado todos los datos. Hubo un error en esta lógica que causó que se presionara el UIViewController
demasiado pronto mientras todavía había otra llamada API en progreso.
Provocó el mismo UIViewController
para ser empujado dos veces por el UINavigationController
y dio esta advertencia.
Tengo el mismo problema cuando utilicé el método pop de navigationcontroller. En mi aplicación utilizo una lógica separada para el controlador de navegación. Así evité el uso de la barra de navegación y siempre está oculta. Luego uso una vista y notificación personalizadas para manejar el botón de retroceso y sus eventos. los observadores de notificación se registran y no se eliminan. Entonces, la notificación se dispara dos veces y crea el error mencionado anteriormente. Revise su código a fondo para obtener tales fallas
Tengo el problema similar cuando trato de hacer:
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:2] animated:YES];
en una función como - (void) popUpToLevelTwo;
, y para poner un return;
al final de la función resuelve el problema
Tengo este problema también. Encontré dos soluciones a este problema:
- Puedes ver esta solución arriba.
- Encontré la subclase de
UINavigationController
donde se resolvió este problema. Controlador de navegación en búfer
Tuve el mismo problema al usar el controlador de navegación y presionar otros controladores. Traté de utilizar el Controlador de navegación en búfer y varios otros enfoques, pero no funcionó para mí. Después de pasar un tiempo para descubrirlo, noté que este problema ocurre si intentas presionar el nuevo controlador de vista mientras la transacción (animación) anterior está en progreso (supongo que unos 0,5 segundos de duración). De todos modos, hice una solución rápida con la delegación del controlador de navegación y esperando los acabados de animación previos.
Tuve este problema cuando olvidé configurar Break; después de presionar la vista en una declaración de cambio!
Como aquí:
case 1:{
SomeViewController *someViewController = [[SomeViewController alloc]initWithNibName:@"SomeViewController" bundle:Nil];
[self.navigationController pushViewController:someViewController animated:YES];
[someViewController release];
}
break; //Forgetting to set break here:
Tuve muchos problemas con el mismo problema. Lo resolví de esta manera
1) No está utilizando UIViewController''s
inicializador designado de initWithNibName:bundle:
Intenta usarlo en lugar de solo init
.
2) establecer animated:YES
a un NO, y eso resolvió el problema. p.ej. [self.navigationController pushViewController: viewController_Obj animated:NO];
Tuve un problema similar que involucraba rebobinar diálogos modales. Publicado la solución aquí ...
https://.com/a/38795258/324479
[Problema]
Controlador Nav -> VC1 -Push -> VC2 -PopOver o Segue modal -> VC3.
VC3 se está desenrollando de vuelta a VC1.
Cuando el Segue de VC2 a VC3 es PopOver y Modal, el desenrollado termina en una advertencia: llamadas no balanceadas para comenzar / finalizar transiciones de aparición para UIViewController "
Si el Segue de VC a VC es push, la advertencia ya no existe.
[Solución]
Sería genial si la lógica de desenvolvimiento se encargara de esto. Tal vez es un error, tal vez no. De cualquier forma, la solución es hacer que VC2 (el controlador que tiene la ventana emergente) sea el objetivo del rebobinado, luego espere a que termine de aparecer antes de abrir el controlador de navegación. Eso garantiza que la animación de rebobinado (ventana emergente invertida) tenga tiempo suficiente para terminar antes de retroceder. Incluso con las animaciones desactivadas, todavía tiene que esperar o si no recibe el error.
Su código para VC2 debería ser el siguiente. (Rápido)
class VC2: UIViewController {
private var unwind = false
@IBAction func unwindToVC1(segue:UIStoryboardSegue) {
unwind = true
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
if unwind {
self.navigationController?.popViewControllerAnimated(false)
}
}
}
el motivo detrás del error "Llamadas no balanceadas para comenzar / finalizar transiciones de apariencia" es cuando navega | segue dos veces al mismo tiempo
una solución sería,
[NSTimer scheduledTimerWithTimeInterval:0.05(or as required) target:self
selector:@selector(your_selector_method_to_push_the_view) userInfo:nil repeats:NO];
Motivo del mensaje: este mensaje se muestra si y solo si está presionando / presentando otro controlador de viewWillAppear
desde el viewWillAppear
, loadView
, init
o viewDidLoad
del controlador de vista actual
Forma de eliminar el mensaje de error: Mueva su código de presentación / presentación al método viewDidAppear
resolverá el problema