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

时间:2015-05-27 13:42:32

标签: ios objective-c uiviewcontroller uipopovercontroller

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

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

@property (nonatomic)UIPopoverController *optionsPopover;

有没有人知道为什么没有可用的崩溃报告?如果没有提到popover为什么会崩溃?

viewWillDisappear中的实现如下所示:

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

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

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

3 个答案:

答案 0 :(得分:1)

请尝试强有力地参考UIPopoverController

@property (nonatomic,retain)UIPopoverController *optionsPopover;

调用下面的方法 - (void)viewDidDisappear:(BOOL)动画而不是viewwilldisappear -

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

答案 1 :(得分:0)

您在解雇后将_optionsPopover设置为nil。

修改

可能的问题:在取消关闭viewController后,计时器不会失效,

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

单独尝试:[_optionsPopover dismissPopoverAnimated:NO];,因为解雇它基本上会使它无效..

答案 2 :(得分:0)

将属性设置为strong:

@property (strong, nonatomic) UIPopoverController *_optionsPopover;

删除这行代码:

_optionsPopover = nil;