문제

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