J'ai un uipoppovercontroller stocké dans une propriété forte dans mon contrôleur d'affichage. Lorsque l'utilisateur fait pivoter l'iPad pendant que la popover est visible, je renvoie la Popover et mettez ma propriété à NIL. Lorsque le code devient Self.Popover = nil, ARC tente de traiter le uipopovercontroller, mais il s'écrase car il est censé être visible. P> Comment suis-je supposé Pour rejeter et nuler la popover sans qu'il s'écrase? p> p>
3 Réponses :
Essayez de nuler dans la vue indiquée, si vous pensez vraiment qu'il soit nécessaire de le faire. Puisque ARC publie automatiquement des objets, je ne suis pas sûr que cela soit vraiment nécessaire. P>
La vue n'est pas déchargée, je ressens simplement un changement d'orientation.
C'est parce que je veux que cela disparaisse après avoir été rejeté au lieu d'être gardé en mémoire, et je vérifie également cette variable à voir si j'ai un stockage, etc.
Tout d'abord, il serait souhaitable de vérifier si la pondéreuse est présentée, cela vérifiera également si elle est allouée:
- (void)releasePopover { self.popover.delegate = nil; self.popover = nil; } - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { if ([self.popover isPopoverVisible]){ [self.popover dismissPopoverAnimated:NO]; NSInvocationOperation *invocationOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(releasePopover) object:nil]; [[NSOperationQueue mainQueue] addOperation:invocationOperation]; } } - (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController { [self releasePopover]; }
Debout sur les épaules de la réponse de Simon, voici mon correctif pour le crash:
Belle explication du problème. Je rencontre exactement la même situation.