Pregunta "¿La aplicación intentó presentar modalmente un controlador activo"?


Me encontré con un choque que muestra una NSInvalidArgumentException con este mensaje en una aplicación que no estaba haciendo esto antes.

La aplicación intentó presentar modalmente un controlador activo   UITabBarController: 0x83d7f00.

tengo un UITabBarController que creo en el AppDelegate y darle la variedad de UIViewControllers.

Uno de ellos quiero presentarlo de forma modal cuando lo toque. Lo hice implementando el método delegado

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController

Si ese controlador de vista es de la clase de la que quiero presentar de forma modal, devuelvo NO y hago

[tabBarController presentModalViewController:viewController animated:YES];

Y ahora estoy obteniendo ese error, lo que parece significar que no se puede presentar modalmente un controlador de vista que esté activo en otro lugar (en la barra de pestañas ...) Debo decir que estoy en XCode 4.2 Developer Preview 7, así que este es iOS 5 (sé sobre el NDA, pero creo que no estoy dando ningún detalle prohibido). Actualmente no tengo una instalación de XCode para probar si esto bloquea la compilación contra el SDK de iOS4, pero estoy casi seguro de que no.

Solo quería preguntar si alguien ha experimentado este problema o si tiene alguna sugerencia


76
2017-09-15 09:55


origen


Respuestas:


Supongamos que tiene tres controladores de vista creados de la siguiente manera:

UIViewController* vc1 = [[UIViewController alloc] init];
UIViewController* vc2 = [[UIViewController alloc] init];
UIViewController* vc3 = [[UIViewController alloc] init];

Usted los ha agregado a una barra de pestañas como esta:

UITabBarController* tabBarController = [[UITabBarController alloc] init];
[tabBarController setViewControllers:[NSArray arrayWithObjects:vc1, vc2, vc3, nil]];

Ahora estás tratando de hacer algo como esto:

[tabBarController presentModalViewController:vc3];

Esto le dará un error porque ese controlador de barra de pestañas tiene un control mortal en el controlador de vista que le dio. No puede agregarlo a la matriz de controladores de vista en la barra de pestañas, o no puede presentarlo de manera modal.

Apple espera que trates sus elementos de UI de cierta manera. Esto probablemente esté oculto en las Pautas de interfaz humana en algún lugar como "no hagas esto porque no esperamos que quieras hacer esto alguna vez".


80
2017-09-23 19:44



Tengo el mismo problema. Intento presentar el controlador de vista justo después de despedirlo.

[self dismissModalViewControllerAnimated:YES];

Cuando trato de hacerlo sin animación, funciona perfectamente, así que el problema es que el controlador todavía está vivo. Creo que la mejor solución es usar dismissViewControllerAnimated:completion: para iOS5


11
2017-12-06 05:11



Tuve el mismo problema. Lo resuelvo. Puedes probar este código:

[tabBarController setSelectedIndex:1];
[self dismissModalViewControllerAnimated:YES];

2
2018-04-30 09:49



En mi caso, estaba tratando de presentar viewController (tengo la referencia de viewController en TabBarViewController) desde diferentes controladores de vista y se bloqueaba con el mensaje anterior. En ese caso, para evitar la presentación, puede usar

viewController.isBeingPresented

!viewController.isBeingPresented {
          // Present your ViewController only if its not present to the user currently.
}

Podría ayudar a alguien.


1
2017-07-13 03:50



Solo eliminar

[tabBarController presentModalViewController:viewController animated:YES];

y mantener

[self dismissModalViewControllerAnimated:YES];

0
2017-10-18 12:59