solucion sea restaurarlo que puedo puede para este despues descargar con compatible actualiza activarlo activar accesorio iphone ios uiviewcontroller

restaurarlo - puede que este accesorio no sea compatible iphone solucion



"Impulsar la misma instancia de controlador de vista más de una vez no es compatible" (12)

Estoy usando el siguiente código para recuperar algunos mensajes y ponerlos en mi bandeja de entrada.

MyInboxVC *inboxVC=[MyInboxVC get ]; //upload all the pending messages UINavigationController *devNavController=[[MyappMgr get]getDeveloperNavigationController ]; [devNavController pushViewController:inboxVC animated:YES]; [devNavController setNavigationBarHidden:NO];

Me sale la excepción

Terminating app due to uncaught exception ''NSInvalidArgumentException'', reason: ''Pushing the same view controller instance more than once is not supported (<MyInboxVC: 0x1452a0>)''

Qué significa eso? ¿Qué estoy haciendo mal?


¿Lo estás haciendo como parte de un cambio? Si es así, no es necesario insertar un VC en el Controlador de navegación porque el cambio ya lo hará. Es por eso que su error está ocurriendo, está presionando un VC que ya está en la pila del NavController.


Arregle el mismo problema (Swift 4) con IB segue usando:

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { return navigationController?.topViewController is MainController ? true : false }


Asegúrese de no agregar el controlador de vista dos veces en la pila de navegación. Por ejemplo, en el ejemplo siguiente self.mainViewC se empuja dos veces porque se instancia inicialmente en el navController, y luego se vuelve a presionar en el navController en la última línea, lo que causaría este problema.

navController=[[UINavigationController alloc] initWithRootViewController:self.mainViewC]; self.window.rootViewController = navController; [self.window makeKeyAndVisible]; [navController pushViewController:self.mainViewC animated:NO];

En este caso, mainViewC ya se ha agregado a la pila cuando se escribió initWithRootViewController. No hay necesidad de pushViewController nuevamente.


Creo que cuando haces algunas acciones realmente rápido, esto también puede suceder. Construyo algo así:

if(![self.navigationController.topViewController isKindOfClass:[YOURCLASS class]]) {

editar//

esto ocurre con mayor frecuencia en dispositivos antiguos con animaciones lentas, como el iPhone 3 o 3gs


Este es un comportamiento esperado de UINavigationController donde se lanza una excepción cuando se trata de empujar un controlador de vista que ya está presente en la pila (está allí desde iOS 2.2).


Esto me estaba sucediendo con un clic en el botón de la barra, sucediendo muy rápido, y era difícil de reproducir, a menos que se volviera loco con los botones. Lo siguiente lo solucionó desactivando el botón, iniciando el impulso de navegación, luego habilitando el botón en el hilo principal (porque se llamaría después de la animación del impulso).

- (void)showMore { self.navigationItem.leftBarButtonItem.enabled = NO; [self.navigationController pushViewController:moreVC animated:YES]; [self.navigationItem.leftBarButtonItem performSelectorOnMainThread:@selector(setEnabled:) withObject:@(YES) waitUntilDone:NO]; }


La razón principal de este problema, obviamente, si el código que empujó el controlador de vista se llama más de una vez. Esto podría ocurrir por muchas razones, el error más común cuando se desencadena un método de devolución de llamada desde una cadena de fondo, donde este método podría ejecutarse más de una vez mientras todavía está presionando el controlador de vista. Ejemplo: Llamar a una aplicación de servicio en el hilo de fondo al tocar un botón, lo que le permitirá presionar el botón más de una vez, y por lo tanto, la devolución de llamada que empuja al controlador de vista se llama más de una vez. La solución @Melvin y @Sam es válida siempre que no desee solucionar el problema original al no presionar más de una vez.


Otra opción que he experimentado es que [MyInboxVC get] no devuelve ninguna instancia de un objeto MyInboxVC. Un signo revelador de esto sería que el error es "Empujar la misma instancia de controlador de vista más de una vez no es compatible (no TheInboxVC: 0x9e31660)", es decir. la clase que se envía más de una vez no se espera MyInboxVC (no se asigna una caída desde MyInboxVC)


Primero maneja el bloqueo para que no mate tu aplicación:

@try { [self.navController pushViewController:viewController animated:NO]; } @catch (NSException * e) { NSLog(@"Exception: %@", e); } @finally { //NSLog(@"finally"); }

Luego, si obtiene el error, use popTo

- (void)pushViewController:(UIViewController *)viewController { if (viewController) { @try { [self.navController pushViewController:viewController animated:NO]; } @catch (NSException * ex) { //“Pushing the same view controller instance more than once is not supported” //NSInvalidArgumentException NSLog(@"Exception: [%@]:%@",[ex class], ex ); NSLog(@"ex.name:''%@''", ex.name); NSLog(@"ex.reason:''%@''", ex.reason); //Full error includes class pointer address so only care if it starts with this error NSRange range = [ex.reason rangeOfString:@"Pushing the same view controller instance more than once is not supported"]; if ([ex.name isEqualToString:@"NSInvalidArgumentException"] && range.location != NSNotFound) { //view controller already exists in the stack - just pop back to it [self.navController popToViewController:viewController animated:NO]; } else { NSLog(@"ERROR:UNHANDLED EXCEPTION TYPE:%@", ex); } } @finally { //NSLog(@"finally"); } } else { NSLog(@"ERROR:pushViewController: viewController is nil"); } }


Significa que ViewController devuelto desde [MyInboxVC get] ya está en la pila de navegación de devNavController . No puede agregar el mismo objeto a la pila varias veces.

Aparentemente, ya tienes un MyInboxVC empujado antes. Asegúrate de haberlo abierto cuando ya no era necesario.

Esa es la respuesta "¿qué significa?", Pero no tiene suficiente información para saber lo que debe hacer para solucionarlo.

Supongo que tu Pila de navegación está creciendo más de lo que esperabas, lo que significa que no estás apareciendo tantas veces como deberías.


Significa que está presionando el mismo objeto viewcontroller para apilar nuevamente cuando ya está allí.

[self.navigationController pushViewController:viewControllerObj animated:NO]; [self.navigationController pushViewController:viewControllerObj animated:NO];

compruebe si está presionando dentro de un bucle o si accidentalmente ha colocado el código más de una vez ...


[devNavController pushViewController: inboxVC animado: NO]; Conjunto animado como NO