gpt4 book ai didi

ios - "UIPopoverPresentationController presentationTransitionWillBegin"使用 UIPopoverController 时崩溃

转载 作者:可可西里 更新时间:2023-11-01 05:40:49 25 4
gpt4 key购买 nike

当我通过点击主 Controller 上的条形按钮项目然后旋转 View 打开弹出窗口时,我遇到了以下崩溃。

"NSGenericException: UIPopoverPresentationController should have a non-nil sourceView or barButtonItem set before the presentation occurs."

我在这里看到了类似的崩溃 - UIActivityViewController crashing on iOS8 iPads ,但我没有在代码中的任何地方直接使用“UIPopoverPresentationController”。

我的主 Controller 是一个 UIViewController 并且有一个 barbuttonitem,当点击它时打开一个弹出窗口作为另一个 Controller ,它是 UITableViewController(DisplayTableViewController 类)。下面是代码:

在我的主 Controller 中,在自定义方法中说“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];
}

当我旋转 View 时,它会被执行。这段代码也在我的主 Controller 中:

- (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 或应用崩溃的原因吗?

最佳答案

这是 iOS8 的问题。如您所知,-didRotateFromInterfaceOrientation: 在 iOS8 中已被弃用。尝试新的 API -viewWillTransitionToSize:withTransitionCoordinator:。只需实现它就可以解决您的问题。

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator 
{
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
// we have nothing to do.
}

关于ios - "UIPopoverPresentationController presentationTransitionWillBegin"使用 UIPopoverController 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27661455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com