Me acabo de encontrar con un bloqueo que muestra un NSInvalidArgumentException
mensaje 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 le doy la matriz de UIViewControllers
.
Uno de ellos quiero presentarlo de manera modal cuando se haga tapping en él. Lo hice implementando el método delegado
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
Si ese controlador de vista es de la clase del que quiero presentar modalmente, devuelvo NO y hago
[tabBarController presentModalViewController:viewController animated:YES];
Y ahora recibo ese error, lo que parece significar que no 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, así que esto 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 falla al compilar contra el SDK de iOS4, pero estoy casi completamente seguro de que no es así.
Solo quería preguntar si alguien ha experimentado este problema o tiene alguna sugerencia.
fuente
Respuestas:
Suponga que tiene tres controladores de vista instanciados así:
Los ha agregado a una barra de pestañas como esta:
Ahora estás intentando hacer algo como esto:
Esto le dará un error porque el controlador de la 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 interfaz de usuario de cierta manera. Esto probablemente esté enterrado en alguna parte de las Directrices de interfaz humana como un "no hagas esto porque no esperamos que quieras hacer esto".
fuente
Tengo el mismo problema. Intento presentar el controlador de vista justo después de descartarlo.
Cuando trato de hacerlo sin animación, funciona perfectamente, por lo que el problema es que el controlador todavía está vivo. Creo que la mejor solución es usar
dismissViewControllerAnimated:completion:
para iOS5fuente
En mi caso, estaba intentando presentar el viewController (tengo la referencia del viewController en el TabBarViewController) desde diferentes controladores de vista y fallaba con el mensaje anterior. En ese caso, para evitar la presentación, puede utilizar
Podría ayudar a alguien.
fuente
Tuve el mismo problema. Lo soluciono. Puedes probar este código:
fuente
Me sucedió el mismo error de problema cuando intenté con
present
un controlador de vista secundario en lugar de suUINavigationViewController
principalfuente
Solo quitar
y mantener
fuente
En lugar de usar:
puedes usar:
fuente
En mi caso, estaba presentando el
rootViewController
de unUINavigationController
cuando se suponía que debía presentar elUINavigationController
sí mismo.fuente