当我使用 popOver 时,NSTimer 似乎无效

Posted

技术标签:

【中文标题】当我使用 popOver 时,NSTimer 似乎无效【英文标题】:NSTimer seems to be invalidated when I use a popOver 【发布时间】:2013-12-30 18:27:46 【问题描述】:

我有一个 NSTimer 随着时间的推移显示文本。如果同时出现一个 popOver,那么计时器似乎就死了。它调用的方法停止打印日志语句,我的代码绝对不会使其无效。

这是预期的行为吗?当我运行计时器时,我应该永远不要有 popOver 吗?

编辑:“同时”我的意思是,在 NSTimer 被我无效之前(它仍在显示文本),用户触发了一个 popOver,这会阻止 NSTimer 继续。我有一些方法可以使打印日志语句的 NSTimer 无效,并且除了该方法之外,我无处可去。发生 popOver 时不显示日志语句。

这就是我调用 popOver 的方式:

if ([self.popOverController isPopoverVisible]) 
    [self.popOverController dismissPopoverAnimated:YES];
 else 
    SubMenuViewController *popup = [[SubMenuViewController alloc] initWithStorySections:tmp_menu];

    self.popOverController = [[UIPopoverController alloc] initWithContentViewController:popup];
    popup.delegate = self;
    [self.popOverController presentPopoverFromRect:self.textView.frame inView: self.backgroundView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

我不认为我在用它做任何奇怪的线程操作,但它仍然会干扰我的计时器。我确实注意到在触发弹出窗口之前已经调用了计时器,这可以做任何事情吗?

【问题讨论】:

您的viewWillAppearviewWillDisappear 方法中有什么吗? 请出示您的代码……“同时”是什么意思?计时器在哪里创建? 不,我的 viewWillAppear 和 Disappear 都是空的。 【参考方案1】:

计时器不应该被弹出框杀死,但它确实取决于弹出框。如果您有一个不调用主运行循环的定制程序,那可能是您的问题。您想确保系统获得时间,以便它可以调用您的计时器调用。否则,在所有调用上设置断点以使计时器无效,并查看是否有人调用了你。

【讨论】:

我有一种方法可以使计时器无效并打印一条日志语句。我的代码中没有其他地方使计时器无效,并且我的日志语句永远不会被调用。我的弹出框是标准弹出框,里面有一个自定义 UIViewController ......我将发布我如何调用弹出框。 啊,我认为计时器是问题所在,但显然我只是错过了日志语句。

以上是关于当我使用 popOver 时,NSTimer 似乎无效的主要内容,如果未能解决你的问题,请参考以下文章

当我调用 [Timer isValid] 或 [Timer invalidate] 时,NSTimer 崩溃

使用 NSTimer 的秒表错误地在显示中包含暂停时间

使用 NSTimer 时发送到实例的无法识别的选择器

关闭 popOver

如何停止 NSTimer

无法弄清楚如何使用 NSTimer 更改视图