113 votes

"L'application a essayé de présenter modalement un contrôleur actif" ?

Je viens de tomber sur un accident montrant un NSInvalidArgumentException avec ce message sur une application qui ne le faisait pas avant.

L'application a essayé de présenter modalement un contrôleur actif UITabBarController : 0x83d7f00.

J'ai un UITabBarController que je crée dans le AppDelegate et lui donner le tableau de UIViewControllers .

Je veux que l'un d'entre eux soit présenté de manière modale lorsqu'on le touche. J'ai fait cela en implémentant la méthode du délégué

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

Si ce contrôleur de vue est de la même classe que celui que je veux présenter de manière modale, je renvoie NO et fais

[tabBarController presentModalViewController:viewController animated:YES];

Et maintenant j'obtiens cette erreur, qui semble signifier que l'on ne peut pas présenter modalement un contrôleur de vue qui est actif ailleurs (dans la barre de tabulation...). Je dois dire que je suis sur XCode 4.2 Developer Preview 7, donc c'est iOS 5 (je sais à propos du NDA, mais je pense que je ne donne pas de détails interdits). Je n'ai pas actuellement 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 juste demander si quelqu'un avait déjà rencontré ce problème ou avait une suggestion à faire.

0 votes

Avant iOS 5, cette opération ne levait pas d'exception, mais ne renvoyait rien. À partir d'iOS 5, cette commande soulève une exception.

3voto

Rahul Shakya Points 737

Pour les développeurs React Native - Le problème n'est peut-être pas dans AppDelegate ou main.m si l'application a été construite avec succès et est en cours d'exécution et se bloque après le splash ou peut-être l'écran d'erreur.

Le problème peut être dû à l'utilisation de polices/ressources qui ne sont pas disponibles dans xcode et qui ne sont pas correctement configurées. Vous pouvez trouver l'erreur en commentant certaines parties à partir de App.js et en forant à l'intérieur de la navigation/écrans et en commentant les composants jusqu'à ce que vous trouviez le composant qui génère l'erreur.....

Dans mon cas, c'est la ressource fontFamily, utilisée juste après le splash dans l'écran de présentation, qui a posé problème.

<Text style={{fontFamily: Fonts.roboto}}>ABC</Text>

Ici, la police roboto n'a pas été configurée correctement. J'ai perdu des jours entiers à déboguer cette erreur. J'espère que cela vous aidera.

1voto

Laura Corssac Points 33

Dans mon cas, je présentais le rootViewController d'un UINavigationController quand je devais présenter le UINavigationController lui-même.

0voto

user170317 Points 586

Il suffit de retirer

[tabBarController presentModalViewController:viewController animated:YES];

et garder

[self dismissModalViewControllerAnimated:YES];

0 votes

Cela donne un avertissement déprécié... alors quelle est l'alternative ?

0 votes

Ici, j'ai utilisé [blockSelf dismissViewControllerAnimated:YES completion:nil] ;

0voto

Au lieu d'utiliser :

self.present(viewControllerToPresent: UIViewController, animated: Bool, completion: (() -> Void)?)

que vous pouvez utiliser :

self.navigationController?.pushViewController(viewController: UIViewController, animated: Bool)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X