ios7 NSInvalidArgumentException 呈现 UIPopoverController
Posted
技术标签:
【中文标题】ios7 NSInvalidArgumentException 呈现 UIPopoverController【英文标题】:ios7 NSInvalidArgumentException presenting UIPopoverController 【发布时间】:2013-09-21 20:27:24 【问题描述】:试图显示一个 UIPopoverController 在 ios 7 中崩溃,而它在 ios6 及之前的版本中工作。错误信息是
由于未捕获的异常“NSInvalidArgumentException”而终止应用,原因:“-[UIPopoverController _commonPresentPopoverFromRect:inView:permittedArrowDirections:animated:]:无法从没有窗口的视图中呈现弹出框。”
其实是真的:self.view.window在ios7中是nil,而在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 在呈现后就丢失了。
【问题讨论】:
【参考方案1】:我发现的最佳解决方案是检查 self.view.window。如果为nil,则在视图中注册一个delegate并等待didMoveToWindow
,它将调用delegate并继续创建并显示de popover。
【讨论】:
以上是关于ios7 NSInvalidArgumentException 呈现 UIPopoverController的主要内容,如果未能解决你的问题,请参考以下文章