当我在我的主控制器上通过点击一个条形按钮项目来打开一个弹出窗口,然后旋转视图时,我遇到了以下崩溃。
"NSGenericException: UIPopoverPresentationController should have a non-nil sourceView or barButtonItem set before the presentation occurs."
我看了这里一个类似的崩溃 - iOS8 iPad上UIActivityViewController崩溃,但我在我的代码中没有直接使用“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"方法中的"sender"始终存在,即在旋转之前和之后都存在,并且是同一个对象。
有什么想法为什么popoverPresentationController为空或应用程序为什么会崩溃吗?