在 viewWillDisappear 中调用 dismissPopoverAnimated 会使应用程序崩溃

calling dismissPopoverAnimated in viewWillDisappear crashes application

我有两个ViewControllers。我们称它们为 1 号和 2 号。在 no2 中,我有 PopoverViewControllerNSTimer 的一些选项和实例。如果在弹出窗口中没有单击任何内容,则在显示弹出窗口 3 秒后,定时器功能将调用 popToViewController,这会将用户返回到 no1 ViewController。问题是触发此功能时,屏幕更改为 1 号,但应用程序崩溃且没有以下错误消息。

PopoverViewController 没有委托,它被注册为第二个 VC 的 属性 为:

@property (nonatomic)UIPopoverController *optionsPopover;

有谁知道为什么没有可用的崩溃报告?如果没有提及弹出窗口,为什么它会崩溃?

viewWillDisappear 中的实现如下所示:

if([_optionsPopover isPopoverVisible]){
    [_optionsPopover dismissPopoverAnimated:NO];
    _optionsPopover = nil;
}

我尝试强制 UI 在主线程上更新(代码下方),但结果是一样的。崩溃仍然存在。

dispatch_async(dispatch_get_main_queue(), ^{
    if([_optionsPopover isPopoverVisible]){
        [_optionsPopover dismissPopoverAnimated:NO];
        _optionsPopover = nil;
    }
});

请尽量强引用UIPopoverController

@property (nonatomic,retain)UIPopoverController *optionsPopover;

调用以下方法 - (void)viewDidDisappear:(BOOL)animated 而不是 viewwilldisappear -

- (void)viewDidDisappear:(BOOL)animated {
if([_optionsPopover isPopoverVisible]){
    [_optionsPopover dismissPopoverAnimated:NO];
    _optionsPopover = nil;
}
}

您正在将 _optionsPopover 设置为 nil 后关闭..

编辑

可能的问题:viewController 关闭后计时器未失效,

if([_optionsPopover isPopoverVisible])
{
    [yourTime invalidate]; // added on edit
    [_optionsPopover dismissPopoverAnimated:NO];
}

单独尝试:[_optionsPopover dismissPopoverAnimated:NO];,因为忽略它基本上会使它变为零..

将 属性 设置为强 :

@property (strong, nonatomic) UIPopoverController *_optionsPopover;

删除这行代码:

_optionsPopover = nil;