找到正确的结果后如何杀死重复的计时器

Posted

技术标签:

【中文标题】找到正确的结果后如何杀死重复的计时器【英文标题】:How do you kill a repeated timer when proper results are found 【发布时间】:2011-12-25 07:51:10 【问题描述】:

我在网页视图加载中有一个 NS Timer Firing,用于查找页面上的信息。然后我对页面设置复选框等进行了一些操作,这些操作引入了一些 AJAX 功能,人们可能知道这些功能不会触发 webviewloaded 方法。简而言之,我想创建一个每 5 秒检查一次的时间,以检查仅在加载正确信息时才会出现的特定部分。这很好,我可以这样做,但我不知道如何停止 NSTIMER,因为这里的所有示例都没有显示传递给函数的参数。

目前我有

   [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(fcheckForEditFinished) userInfo:nil repeats:YES];

-(void) fcheckForEditFinished

//Would like to kill timer at this point. 

谢谢凯文

【问题讨论】:

【参考方案1】:

documentation of scheduledTimerWithTimeInterval:target:selector:userInfo:repeats: 这么说:

选择器 定时器触发时发送给target的消息。这 选择器必须具有以下签名:- (void)timerFireMethod:(NSTimer*)theTimer 计时器将自己作为参数传递给此方法。

您可以通过发送invalidate 消息来“杀死”计时器。所以将fcheckForEditFinished 更改为fcheckForEditFinished:,如下所示:

- (void)fcheckForEditFinished:(NSTimer *)timer

    if (checkForEdit()) 
        [timer invalidate];
    

定时器会自动将自己作为fcheckForEditFinished:的参数传递。确保在对 scheduledTimerWithTimeInterval:... 的调用中也将冒号添加到选择器中。

【讨论】:

我必须在选择器中传递一些东西吗? 我不太确定你的意思,但我相信答案是否定的。 您通常不会将对象传递给方法吗?我再次来自 Windows 世界,但如果你有一个方法 -(void) myfn:(NSSTring *) mystring 并且你调用所说的方法不是 myfn(@"some string");我没有看到在这里完成 出色的帮助先生。我很珍惜时间。 附加快速问题由于未捕获的异常“NSInvalidArgumentException”,我得到 SigAboprt 终止应用程序,原因:'-[AttendanceWizardViewController fcheckForEditFinished]:无法识别的选择器发送到实例 0x68893e0'

以上是关于找到正确的结果后如何杀死重复的计时器的主要内容,如果未能解决你的问题,请参考以下文章

我将如何更改我的程序,以便在方法正确后计时器停止

[Unity计时器倒计时,当应用杀死Android时不起作用

如何正确计时用 Java Spring MVC 编写的 API?

当隔离被杀死时,颤振隔离内的计时器不会停止

应用程序被杀死时,如何每 10 秒将用户位置上传到服务器? [关闭]

SwiftUI:取消定时器后如何重新启动它?