Je viens de tomber sur un crash montrant un NSInvalidArgumentException
avec ce message sur une application qui ne le faisait pas auparavant.
L'application a tenté de présenter modalement un contrôleur actif UITabBarController: 0x83d7f00.
J'ai un UITabBarController
que je crée dans le AppDelegate
et lui donne le tableau de UIViewControllers
.
L'un d'entre eux que je souhaite présenter de manière modale lorsque j'appuie dessus. Je l'ai fait en implémentant la méthode des délégués
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
Si ce contrôleur de vue est de la classe de celui que je veux présenter modalement, je retourne NON et fais
[tabBarController presentModalViewController:viewController animated:YES];
Et maintenant, j'obtiens cette erreur, ce qui semble signifier que vous ne pouvez pas présenter modalement un contrôleur de vue qui est actif ailleurs (dans la barre d'onglets ...) Je devrais dire que je suis sur XCode 4.2 Developer Preview 7, donc c'est iOS 5 (je connais la NDA, mais je pense que je ne donne aucun détail interdit). Je n'ai actuellement pas d'installation XCode pour tester si cela plante la compilation avec le SDK iOS4, mais je suis presque entièrement sûr que ce n'est pas le cas.
Je voulais seulement demander si quelqu'un a rencontré ce problème ou a des suggestions
la source
Réponses:
Supposons que vous ayez trois contrôleurs de vue instanciés comme ceci:
Vous les avez ajoutés à une barre d'onglets comme celle-ci:
Maintenant, vous essayez de faire quelque chose comme ceci:
Cela vous donnera une erreur car ce contrôleur de barre d'onglets a une emprise mortelle sur le contrôleur de vue que vous lui avez donné. Vous pouvez soit ne pas l'ajouter au tableau des contrôleurs de vue dans la barre d'onglets, soit ne pas le présenter de manière modale.
Apple attend de vous que vous traitiez leurs éléments d'interface utilisateur d'une certaine manière. Ceci est probablement enterré quelque part dans les Directives de l'Interface Humaine comme un "ne faites pas cela parce que nous ne nous attendons pas à ce que vous vouliez jamais faire cela".
la source
J'ai le même problème. J'essaie de présenter le contrôleur de vue juste après avoir rejeté.
Quand j'essaie de le faire sans animation, cela fonctionne parfaitement, donc le problème est que le contrôleur est toujours en vie. Je pense que la meilleure solution est d'utiliser
dismissViewControllerAnimated:completion:
pour iOS5la source
Dans mon cas, j'essayais de présenter le viewController (j'ai la référence du viewController dans le TabBarViewController) à partir de différents contrôleurs de vue et il plantait avec le message ci-dessus. Dans ce cas, pour éviter de présenter, vous pouvez utiliser
Pourrait aider quelqu'un.
la source
J'ai eu le même problème, je le résous. Vous pouvez essayer ce code:
la source
La même erreur de problème m'est arrivée lorsque j'ai essayé
present
un contrôleur de vue enfant au lieu de sonUINavigationViewController
parentla source
Retirez simplement
et garde
la source
À la place d'utiliser:
vous pouvez utiliser:
la source
Dans mon cas, je présentais le
rootViewController
d'unUINavigationController
quand j'étais censé présenter leUINavigationController
lui - même.la source