53 votes

Popovers ne peut être présenté à partir d'un point de vue qui n'ont pas de fenêtre

Que signifie cette erreur indique:

"Popovers ne peut être présenté à partir d'un point de vue qui n'ont pas de fenêtre."

30voto

MobiMaciek Points 1767

la chose qui m'a sauvé la vie:

if (self.view.window != nil)
    [popoverController presentPopoverFromRect:CGRectMake(44, yCoord, 111, 111) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

en ajoutant si la condition il ne crash plus. Je n'ai pas vraiment l'obtenir parce que le presentPopoverFromRect fonction est TOUJOURS appelé. Il n'y a pas de situation où la fenêtre est nul mais de toute façon il a fait le tour. Je suppose que c'est plus sur l'actualisation de la référence à la fenêtre ou quelque chose comme ça..

edit: j'ai cela en viewDidAppear mais sans la condition si elle a parfois été s'écraser. Dans la plupart des cas, il suffit de déplacer presentPopoverFromRect à viewDidAppear ou didMoveToWindow mais dans mon cas, pour une raison quelconque, le si nécessaire.

24voto

hey68you Points 296

la vue que vous êtes en train d'ajouter la liste de a à déjà été ajouté à la fenêtre avec le "addSubview:" la méthode.

Essayez d'attendre jusqu'à ce que

- (void) didMoveToWindow

est appelé pour la vue, puis charger la liste

4voto

Lewis Anderson Points 41

J'ai eu ce problème.

J'ai eu un UITabBarController que la vue de détail, et j'ai mis le barButtonItem comme le leftBarButtonItem sur les trois manettes de navigation dans la barre d'onglet.

vcChart.navigationItem.leftBarButtonItem = barButtonItem;
vcAnalysis.navigationItem.leftBarButtonItem = barButtonItem;
vcTechnicals.navigationItem.leftBarButtonItem = barButtonItem;

S'avère que le dernier ajout est valide, et au cours des deux serait jeter l'exception gemmage.

Pour le fixer, j'ai seulement mis la leftBarButtonItem pour le visible-vue-contrôleur, et tout juste de passer la barButtonItem à la vue visible contrôleur à chaque fois que l'utilisateur a basculé onglets.

2voto

Joshua Dance Points 937

Il existe de nombreuses façons d'obtenir cette erreur. Fondamentalement, vous avez besoin d'attendre pour appeler l' presentPopover de commande jusqu'à ce que votre appel vue est ajouté à la fenêtre. J'ai fait de cette façon.

- (void)viewDidAppear:(BOOL)animated
{
    [self methodThatDisplaysPopOver];
}

Mon presentPopoverFromRect appel est à l'intérieur de mon methodThatDisplaysPopOver fonction.

Vous pouvez protéger tous les presentPopover appel comme MobiMaciek suggère avec cette.

if (self.view.window != nil)
    [popoverController presentPopoverFromRect:CGRectMake(10, 10, 100, 100) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

Cependant, je pense qu'il serait mieux de comprendre que lorsque l'auto.vue.la fenêtre est affectée et assurez-vous de vous présenter la liste après le point de vue a une fenêtre.

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