objective-c ios ios5

objective c - "¿La aplicación intentó presentar modalmente un controlador activo"?



objective-c ios (4)

Me encontré con un bloqueo 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 AppDelegate y le doy la matriz 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 ...) Debería decir que estoy en XCode 4.2 Developer Preview 7, por lo que esto es iOS 5 (sé sobre la 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


Solo eliminar

[tabBarController presentModalViewController:viewController animated:YES];

y mantener

[self dismissModalViewControllerAnimated:YES];


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".


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


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

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