【发布时间】:2014-12-26 20:06:48
【问题描述】:
当我通过点击主控制器上的条形按钮项然后旋转视图打开弹出框时,我遇到了以下崩溃。
"NSGenericException: UIPopoverPresentationController should have a non-nil sourceView or barButtonItem set before the presentation occurs."
我在这里看到了类似的崩溃 - UIActivityViewController crashing on iOS8 iPads,但我没有在代码中的任何地方直接使用“UIPopoverPresentationController”。
我的主控制器是一个 UIViewController 并且有一个 barbuttonitem,当点击它时会打开一个弹出框作为另一个控制器 UITableViewController(DisplayTableViewController 类)。下面是代码:
在我的主控制器中的自定义方法中说“createPopover”,我有:
- (void)createPopover
{
self.tableViewController = [[DisplayTableViewController alloc] init];
self.tableViewController.someDelegate = self;
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:self.tableViewController];
// Display the popover.
self.navBarButtonItemPopoverController = [[UIPopoverController alloc] initWithContentViewController:navigationController];
self.navBarButtonItemPopoverController.delegate = self;
[self displayPopover:self.myBarButton];
}
- (void)displayPopover:(id)sender
{
[self.navBarButtonItemPopoverController presentPopoverFromBarButtonItem:sender
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
}
当我旋转视图时,它会被执行。这段代码也在我的主控制器中:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
if ([self.navBarButtonItemPopoverController isPopoverVisible])
{
[self.navBarButtonItemPopoverController dismissPopoverAnimated:NO];
[self performSelector:@selector(displayPopover:) withObject:self.myBarButton afterDelay:0.0];
}
}
在此之后,应用程序因上述错误而崩溃。在我的 createPopover 方法中,我尝试了:
self.tableViewController.popoverPresentationController.sourceView = [self view];
但没有任何帮助。当我在生命周期中的任何时候打印出“self.tableViewController.popoverPresentationController”或“self.popoverPresentationController”时,它总是为零。我还注意到 displayPopover 方法中的“发送者”始终存在,即在旋转之前和之后也是相同的对象。
知道为什么 popoverPresentationController 为 nil 或应用程序崩溃的原因吗?
【问题讨论】:
标签: ios objective-c ios8 uipopovercontroller