如何在NSTimer运行时取消它? (目标C)

我有一个非常简单的带有NSTimer的计时器应用程序。我设置了一个“取消”按钮,但不确定如何使它工作。

这是我的计时器代码。当用户按下开始按钮(未显示)时触发。

    -(void) timerFunction{
    NSString *timerSeconds = _timerSecondsField.text;
    NSString *doubleconversion = timerSeconds;
    double  timersecondsval = [doubleconversion doubleValue];
    self.cancelVisibility.hidden = NO; 
    self.timerSecondsField.hidden = YES; 
    self.restartTimerVisibility.hidden = YES;
    self.timerStatus.hidden= NO;
    self.timerStatus.text = (@"Timer Running");
       
    [NSTimer scheduledTimerWithTimeInterval:timersecondsval target:self selector:@selector(timerStatusUpdater) userInfo: nil repeats:NO];
    

}

基本上,我希望取消按钮停止计时器并重置视图。我尝试使用if语句将“ timersecondsval”更改为0,并使“ timerStatusUpdater”调用我的视图重置函数,而不是调用播放警报声音的函数,但是更改时间没有用,所以我必须等待直到计时器结束以重置视图。 (并且视图重置使我的应用程序崩溃了。)

这是重置视图的代码:

-(void) newView{
    self.cancelVisibility.hidden = YES;
    self.timerStatus.hidden = YES;
    self.restartTimerVisibility.hidden = YES;
    self.timerSecondsField.hidden = NO;
    
}

我还尝试使用像这样的cancel函数来调用新的NSTimer,但是它没有取消以前的函数。这是该代码:

- (IBaction)cancelpressed:(id)sender {
    
     [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(newView) userInfo: nil repeats:NO];
    
    
}

那么我可以添加一个功能来取消以前的NSTimer,以便取消按钮起作用吗?

谢谢!

iCMS 回答:如何在NSTimer运行时取消它? (目标C)

您需要类似的东西

self.timer = [NSTimer scheduledTimerWithTimeInterval:timersecondsval ...

开始和取消您需要

self.timer.invalidate;

编辑

基于注释-请记住,您需要在界面中为此计时器声明ivar,例如

@interface MyClass ()

@property (nonatomic,strong) NSTimer * timer; // My timer

@end

您可以将其放置在标头或类文件中,具体取决于您是否希望其他类也可以访问它。

另外,请注意,对于ARC,您通常将其声明为strong

本文链接:https://www.f2er.com/1811332.html

大家都在问