UIPopover Presentation 和 UIPopover dismissing 导致崩溃

UIPopoverPresentation and UIPopover dismissing causes crash

几个月来我一直在开发应用程序,没有出现任何弹出窗口问题。突然间,今天的爆米花就完蛋了。

我已经尝试了几种不同的方法,无论我何时通过按下弹出窗口中的按钮关闭弹出窗口或点击弹出窗口外部,应用程序都会崩溃。

使用 Instruments,我可以看到只有在弹出窗口被关闭后才会出现僵尸引用:

*** -[UITransitionView willRemoveSubview:]: message sent to deallocated instance 0x7f9985bcd980

所以我已经记录了那个堆栈,但没有太多帮助,因为整个堆栈都与 UIKit 和内置动画等有关。

使用标准的 UIPopovers

self.popover = [[UIPopoverController alloc] initWithContentViewController:self.navVC];
self.popover.backgroundColor = [UIColor accentColor];
self.popover.delegate =self;
[self.seatingChartPopover presentPopoverFromRect:CGRectMake(x,y, 1, 1)
                                          inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

或者在ios8

中使用新的 UIPopoverPresentationController 方法
self.navVC.modalPresentationStyle = UIModalPresentationPopover;

UIPopoverPresentationController* popover = self.navVC.popoverPresentationController;
self.navVC.preferredContentSize = [self.childVC preferredContentSize];
popover.sourceView = self.view;
popover.sourceRect = CGRectMake(x,y, 1, 1);
popover.permittedArrowDirections = UIPopoverArrowDirectionAny;
[self presentViewController:self.seatingChartNavController animated:YES completion:nil];

我已经确定所有涉及的视图控制器都有一个强引用。

正如我提到的,我已经几个月没有更改显示此弹出窗口的代码,直到今天它一直运行良好。我花了几个小时调试它无济于事。

此外,如果我只是将 self.navVC 作为普通模态视图显示,则该视图可以正常显示并可以关闭。只有当它设置为弹出窗口时才会失败

在此先感谢您的帮助。

我很惭愧地承认我不小心在我的一个 UIView 类别中放置了 dealloc 方法。

令我感到惊讶的是,这并没有引发任何类型的编译器警告,但在删除它之后,就再也没有出现任何奇怪的崩溃了。