Вопрос

Trying to show a UIPopoverController crashes in ios 7 while it works in ios6 and before. The error message is

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIPopoverController _commonPresentPopoverFromRect:inView:permittedArrowDirections:animated:]: Popovers cannot be presented from a view which does not have a window.'

In fact, it's true: self.view.window is nil in ios7 but not in ios6.

The code:

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

The view is created (and assigned to self.view) programatically in the loadView method, while the popover is shown after pressing a button. Any suggestion?

EDIT: looks like the problem is using a modal view before showing the popup, in spite of dismissing it. Somehow, the self.view.window is lost after presenting it.

Это было полезно?

Решение

The best solution I've found is to check self.view.window. If it is nil, then register a delegate in the view and wait for didMoveToWindow, which will call the delegate and proceed to create and show de popover.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top