2012-06-09 3 views
1

Voici la mise en place de mon avis:UIPopoverController et UIImagePickerController accident

View Setup

Lorsque le UIBarButtonItem est cliqué, il faut mettre en place un UIImagePickerController. Je dois le faire en utilisant un UIPopoverController, qui est invoqué en cliquant sur le bouton "reset", car il est nécessaire sur l'iPad. Voici mon code:

-(IBAction) btnReset:(id)sender { 
    [self chooseImage]; 
} 

-(void) chooseImage { 
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { 
     imagepicker = [[UIImagePickerController alloc] init]; 
     imagepicker.allowsEditing = NO; 
     imagepicker.delegate = self; 
     imagepicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
     imagepicker.navigationBar.opaque = true; 


     if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
      popoverController = [[UIPopoverController alloc] initWithContentViewController:imagepicker]; 

      [popoverController presentPopoverFromBarButtonItem:reset permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES]; 

     } else { 
      [self presentModalViewController:imagepicker animated:YES]; 
     } 
    } 
} 

Cependant, quand on l'appelle, la vue se bloque avec l'erreur:

'NSInvalidArgumentException', reason: '-[UIPopoverController presentPopoverFromRect:inView:permittedArrowDirections:animated:]: Popovers cannot be presented from a view which does not have a window.'

Qu'est-ce que je fais mal? Merci d'avance.

+0

Quelle est la variable de réinitialisation que vous présentez le popover? –

+0

Réinitialiser est le nom du bouton – DGund

Répondre

0

Il semble que vous essayez de créer un popover sur un élément qui ne figure pas dans la hiérarchie de vue. Si cette méthode est invoquée par votre bouton, changez l'en-tête de la méthode en - (void) chooseImage: (id) sender et essayez de présenter le popover à partir du UIBarButton que vous avez dans votre barre d'outils.

De plus, si vous utilisez ARC (dont vous avez l'air), vous devez tenir sur votre UIPopover sinon il sera libéré quand il est encore nécessaire voir this stack overflow post. Vous pouvez déjà faire cela mais je pensais que je l'augmenterais comme un je ne peux pas voir si/comment vous avez spécifié votre popoverController.

+0

L'élément UIBarButtonItem IBAction appelle simplement la méthode chooseImage, donc cela devrait fonctionner. Je ne suis pas sûr que le code que je devrais avoir en termes de l'autre poste. J'ai créé le popOver dans le fichier d'en-tête et synthétisé ses propriétés. – DGund

+0

Avez-vous regardé cet article? http://stackoverflow.com/questions/3377001/popovers-cannot-be-presented-from-a-view-which-does-not-have-a-window –

+0

La question sous la réponse acceptée dans votre lien fonctionne le mieux . Ce n'est pas parfait, mais je vais le faire fonctionner. – DGund

Questions connexes