ios7 NSInvalidArgumentException, представляющий UIPopoverController

Попытка показать сбой UIPopoverController в ios 7, хотя он работает в ios6 и более ранних версиях. Сообщение об ошибке

Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «-[UIPopoverController _commonPresentPopoverFromRect:inView:permittedArrowDirections:animated:]: всплывающие окна не могут быть представлены из представления, в котором нет окна».

На самом деле это правда: self.view.window равен нулю в ios7, но не в ios6.

Код:

UIPopoverController *pop = [[UIPopoverController alloc] initWithContentViewController:aViewCtl];
pop.delegate = self;
[pop presentPopoverFromRect:CGRectMake(aRect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

Представление создается (и назначается self.view) программно в методе loadView, а всплывающее окно отображается после нажатия кнопки. Любое предложение?

РЕДАКТИРОВАТЬ: похоже, проблема заключается в использовании модального представления перед отображением всплывающего окна, несмотря на его отклонение. Каким-то образом окно self.view.window теряется после его представления.


person Luis    schedule 21.09.2013    source источник


Ответы (1)


Лучшее решение, которое я нашел, - это проверить self.view.window. Если он равен нулю, то зарегистрируйте делегата в представлении и дождитесь didMoveToWindow, который вызовет делегата и продолжит создание и отображение всплывающего окна.

person Luis    schedule 24.09.2013