Я получаю следующий сбой, когда открываю popover, нажимая на элемент кнопки на главном контроллере, а затем поворачивая представление.«UIPopoverPresentationController presentationTransitionWillBegin» сбой при использовании UIPopoverController
"NSGenericException: UIPopoverPresentationController should have a non-nil sourceView or barButtonItem set before the presentation occurs."
Я смотрел на подобной аварии здесь - UIActivityViewController crashing on iOS8 iPads, но я не непосредственно с помощью «UIPopoverPresentationController» где-нибудь в моем коде.
Мой главный контроллер - UIViewController и имеет barbuttonitem, который при нажатии открывает popover как другой контроллер, который является UITableViewController (DisplayTableViewController class). Ниже приведен код:
В моем основном контроллере в пользовательском методе сказать «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 - это нуль или почему приложение рушится?
О, отлично. Это действительно помогло решить проблему. Но любая идея, почему он жаловался на sourceView и barButtonItem. Из всего, что я узнал, казалось, что sourceType или barButtonItem не устанавливаются, и поэтому он сбой. –