Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 调用dismissPopoverAnimated在ViewWillEnglish中会使应用程序崩溃_Ios_Objective C_Uiviewcontroller_Uipopovercontroller - Fatal编程技术网

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

Ios 调用dismissPopoverAnimated在ViewWillEnglish中会使应用程序崩溃,ios,objective-c,uiviewcontroller,uipopovercontroller,Ios,Objective C,Uiviewcontroller,Uipopovercontroller,我有两个视图控制器。让我们叫他们1号和2号。在no2中,我有PopoverViewController,带有一些选项和NSTimer实例。如果在弹出窗口中未单击任何内容,则计时器函数将在弹出窗口出现3秒后调用popToViewController,这将使用户返回no1ViewController。问题是,当这个函数被触发时,屏幕变为no1,但应用程序崩溃,并且没有下面的错误消息 PopoverViewController没有委托,它作为第二个VC的属性注册为: @property (nonato

我有两个
视图控制器
。让我们叫他们1号和2号。在no2中,我有
PopoverViewController
,带有一些选项和
NSTimer
实例。如果在弹出窗口中未单击任何内容,则计时器函数将在弹出窗口出现3秒后调用
popToViewController
,这将使用户返回no1
ViewController
。问题是,当这个函数被触发时,屏幕变为no1,但应用程序崩溃,并且没有下面的错误消息

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

@property (nonatomic)UIPopoverController *optionsPopover;
有人知道为什么没有可用的碰撞报告吗?如果没有提到popover,为什么它会崩溃

ViewWillEnglish中的实现如下所示:

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)ViewDidEnglishe:(BOOL)动画而不是ViewWillEnglishe中调用下面的方法-

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

您正在将解除后的
\u optionspover
设置为零

编辑

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

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

Try:
[\u optionspover dismisspoveranimated:NO]单独使用,因为忽略它基本上会使其为零

将属性设置为强:

@property (strong, nonatomic) UIPopoverController *_optionsPopover;
删除这行代码:

_optionsPopover = nil;

若之前将对象的引用设置为零,那个么如何从对象调用某个对象?通过这样做,您正在对空点引用调用函数。我尝试了这个方法,但仍然存在错误。应用程序在没有崩溃信息的情况下崩溃。我已将NSZombie添加到项目中。在此之前,您是否已使计时器无效?计时器也可能被触发。。您已经解除了viewcontroller,其中目标方法为..计时器仅在时间到期时触发一次。我不会在任何时候调用invalidate,除非单击了popover中的选项。选项从未单击过,我也从未调用过类似的断点集。很难用interval..>中断计时器无论如何,请尝试调用invalidate。。你害怕尝试吗?如果不尝试,你将无法找出问题所在。我这样做了,但错误仍然存在,并且崩溃信息不存在。我这样做了,但错误仍然存在,并且崩溃信息不存在。我没有得到。这是主要问题。应用程序崩溃,并且在主类中仅显示标记的绿线。请使用此url,以帮助获取其崩溃所在的行-我得到此错误***-[\u UIPopoverView layer]:发送到解除分配实例0x127d8da20Ok的消息得到您的问题,请检查上面的内容