"UIPopoverPresentationController presentationTransitionWillBegin" failed while using UIPopoverController

I get the following crash when I open a popover by clicking on a button element on the main controller and then rotating the view.

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

I looked at a similar crash here - Crash in the UIActivityViewController on iPads iOS8 , but I do not use the “UIPopoverPresentationController” anywhere in my code.

My main controller is a UIViewController and has a barbuttonitem, which when clicked opens a popover like another controller, which is a UITableViewController (class DisplayTableViewController). Below is the code:

In my main controller in the user method say "createPopover" I have:

- (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 ?

+4
1

iOS8. , -didRotateFromInterfaceOrientation: iOS8. API -viewWillTransitionToSize:withTransitionCoordinator:. .

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

Source: https://habr.com/ru/post/1569076/


All Articles