2010-10-24 5 views
12

Sto provando a visualizzare UIImagePickerControl nella mia app per iPad. All'inizio, il debugger mi ha detto che dovevo metterlo in un popover quando lo facevo su un iPad. Così ho scritto il seguente codice:UIPopoverController & UIImagePickerControl: "I popover non possono essere presentati da una vista che non ha una finestra"

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
imagePicker.delegate = self; 
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
popover = [[UIPopoverController alloc] initWithContentViewController:imagePicker]; 
[popover presentPopoverFromRect:CGRectMake(0.0, 0.0, 400.0, 400.0) 
         inView:self.view 
     permittedArrowDirections:UIPopoverArrowDirectionAny 
         animated:YES]; 

Tuttavia, ora ottengo il seguente errore: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Popovers cannot be presented from a view which does not have a window.'

Qualche suggerimento su cosa devo fare? So che self.view dovrebbe avere una finestra, ma a quanto pare ... non è così?

+1

Questo è probabilmente anche il pezzo più veloce di codice che ho trovato per ottenere un controller di pop-up rapido. Molto bene. –

risposta

13

Questo può accadere se quel bit di codice viene eseguito prima che la vista sia caricata, come self.view è ancora nullo e quindi lo è anche self.view.window.

È possibile che lo si stia facendo in un metodo init o in un altro posto prima che la vista venga caricata (prima che venga chiamato -viewDidLoad:)?

+1

Buona chiamata - Ho spostato la chiamata di funzione a '-viewDidAppear:' e funziona correttamente ora! – Jason

2

Questo errore mi aveva sconcertato, ma si è scoperto che era perché la barButtonItem ero di passaggio a presentPopoverFromBarButtonItem è stato un elemento UIBarButtonSystemItemFlexibleSpace formica un pulsante di vero e proprio. Il mio errore di utente, ma solo così le persone sanno che questo può anche