在 viewWillDisappear 中调用 dismissPopoverAnimated 会使应用程序崩溃
calling dismissPopoverAnimated in viewWillDisappear crashes application
我有两个ViewControllers
。我们称它们为 1 号和 2 号。在 no2 中,我有 PopoverViewController
和 NSTimer
的一些选项和实例。如果在弹出窗口中没有单击任何内容,则在显示弹出窗口 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;
我有两个ViewControllers
。我们称它们为 1 号和 2 号。在 no2 中,我有 PopoverViewController
和 NSTimer
的一些选项和实例。如果在弹出窗口中没有单击任何内容,则在显示弹出窗口 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;