我有两个ViewControllers
。我们称之为no1和no2。在第2期,我PopoverViewController
有NSTimer
的一些选项和实例。如果在弹出窗口中没有点击任何内容,定时器功能在弹出窗口后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;
}
});
答案 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;