28 votes

NSInvalidArgumentException', reason : 'La feuille ne peut être présentée car la vue n'est pas dans une fenêtre'.

Après avoir mis à jour Xcode de la version 4 à 5 et donc d'iOS 6 à iOS 7, j'obtiens l'erreur suivante :

NSInvalidArgumentException', reason : 'La feuille ne peut être présentée car la vue n'est pas dans une fenêtre'.

dans cette ligne :

[actionSheet showInView:self.view];

48voto

Jeremy Fox Points 1483

Je viens d'avoir exactement le même problème et malheureusement je ne suis toujours pas sûr de la cause profonde du problème. Cependant, vous trouverez ma solution actuelle ci-dessous. Si je fais des progrès sur la cause première du problème, je vous le ferai savoir.

UIWindow* window = [[[UIApplication sharedApplication] delegate] window];
if ([window.subviews containsObject:self.view]) {
    [emailSheet showInView:self.view];
} else {
    [emailSheet showInView:window];
}

11voto

Reinhard Männer Points 2698

J'ai le même problème. Dans mon code, la raison évidente était que je voulais afficher une feuille d'action en viewWillAppear: . Après avoir déplacé le code vers viewDidAppear: l'erreur a disparu.

7voto

Kapil Chandel Points 101

Je ne sais pas quelle est la cause profonde du problème, mais j'ai trouvé une solution qui fonctionne pour moi. A la place de self.view placez cette ligne :

[[[[UIApplication sharedApplication] keyWindow] subviews] lastObject]

par exemple :

[actionSheet showInView:[[[[UIApplication sharedApplication] keyWindow] subviews] lastObject]];

2voto

Refael.S Points 936

J'ai eu le même problème et dans mon cas, cela s'est produit lorsque j'ai essayé de montrer une feuille d'action sur mon self.view alors que mon self.view présentait un autre viewController.

C'est le crash : "La feuille ne peut être présentée car la vue n'est pas dans une fenêtre"

exemple pour le problème :

[modalViewController dismissModalViewControllerAnimated:YES];
[actionSheet showInView:self.view];

J'ai résolu le problème en attendant que le modalViewController soit rejeté, puis en affichant la feuille d'action.

Solution :

[modalViewController dismissModalViewControllerAnimated:YES];
[actionSheet performSelector:@selector(showInView:) withObject:self.view afterDelay:0.6];

J'espère que cela aidera beaucoup de gens :)

2voto

omi5489 Points 9

J'ai eu le même problème [actionSheet showInView:self.view]; et je l'ai résolu avec [actionSheet showInView:[UIApplication sharedApplication].keyWindow]; .

Peut-être que le problème est lié au paragraphe de la Documentation Apple :

Notes de sous-classement :

UIActionSheet n'est pas conçue pour être sous-classée, et vous ne devez pas ajouter de vues à sa hiérarchie. Si vous avez besoin de présenter une feuille avec plus de personnalisation que celle fournie par l'API UIActionSheet, vous pouvez créer votre propre feuille et la présenter de manière modale avec presentViewController:animated:completion: .

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