2010-10-24 2 views
12

Я пытаюсь отобразить UIImagePickerControl в своем приложении для iPad. Сначала отладчик сказал мне, что мне нужно было поместить его в popover, когда делаете это на iPad. Поэтому я написал следующий код:UIPopoverController & UIImagePickerControl: «Popovers не может быть представлен с представлением, у которого нет окна»

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

Однако, теперь я получаю следующее сообщение об ошибке: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Popovers cannot be presented from a view which does not have a window.'

Любые предложения о том, что я должен делать? Я знаю, что у self.view должно быть есть окно, но, видимо ... это не так?

+1

Это, вероятно, самый быстрый фрагмент кода, который я нашел, чтобы получить быстрый контроллер popover. Отлично сработано. –

ответ

13

Это может произойти, если этот бит кода будет выполнен до загрузки вида, так как self.view по-прежнему равен нулю, поэтому он равно self.view.window.

Возможно ли, что вы делаете это в методе init или в другом месте перед загрузкой представления (до того, как вызывается -viewDidLoad:)?

+1

Хороший вызов - я переместил вызов функции на '-viewDidAppear:' и теперь он работает правильно! – Jason

2

Эта ошибка была у меня сбита с толку, но оказалось, что это было потому, что barButtonItem Я проходил мимо до presentPopoverFromBarButtonItem был UIBarButtonSystemItemFlexibleSpace вещь ant фактическая кнопка. Моя ошибка пользователя, но так, чтобы люди знали, что это может быть