尝试显示UIPopoverController在ios 7中崩溃,而它在ios6及以前版本中运行。错误消息是
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [UIPopoverController _commonPresentPopoverFromRect:inView:allowedArrowDirections: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];
在loadView方法中以编程方式创建(并分配给self.view)视图,而在按下按钮后显示弹出窗口。有什么建议吗?
编辑:看起来问题是在显示弹出窗口之前使用模态视图,尽管解雇了它。不知何故,self.view.window在呈现之后就会丢失。
答案 0 :(得分:0)
我发现的最佳解决方案是检查self.view.window。如果它是nil,则在视图中注册一个委托并等待didMoveToWindow
,这将调用委托并继续创建并显示de popover。