2010-10-24 7 views
12

Ich versuche ein UIImagePickerControl in meiner iPad App anzuzeigen. Zuerst sagte mir der Debugger, dass ich es auf einem iPad in ein Popover stecken müsste. Also schrieb ich den folgenden Code:UIPopoverController & UIImagePickerControl: "Popovers können nicht aus einer Ansicht dargestellt werden, die kein Fenster enthält"

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]; 

aber jetzt bekomme ich folgende Fehlermeldung: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Popovers cannot be presented from a view which does not have a window.'

Irgendwelche Vorschläge, was soll ich tun? Ich weiß, dass self.view sollte ein Fenster haben, aber anscheinend ... es nicht?

+1

Dies ist auch wahrscheinlich der schnellste Stück Code, den ich gefunden habe, um einen schnellen Popover-Controller zu bekommen. Gut gemacht. –

Antwort

13

Dies kann passieren, wenn dieses Bit Code ausgeführt wird, bevor die Ansicht geladen wird, da self.view immer noch Null ist und daher auch self.view.window ist.

Ist es möglich, dass Sie dies in einer Init-Methode oder einem anderen Ort tun, bevor die Ansicht geladen wird (bevor -viewDidLoad: aufgerufen wird)?

+1

Guter Anruf - Ich habe den Funktionsaufruf auf '-viewDidAppear:' verschoben und es funktioniert jetzt richtig! – Jason

2

Dieser Fehler hatte mich verwirrt, aber es stellte sich heraus, dass es war, weil die barButtonItem ich in zu presentPopoverFromBarButtonItem ein UIBarButtonSystemItemFlexibleSpace Element eine tatsächliche Taste Ameise war vorging. Mein Benutzer Fehler, aber nur so Leute wissen, dass dies kann