NSTimer [计时器无效] 不起作用

NSTimer [timer invalidate] doesn't work

计时器不会停止,在 stopButtonPressed 中不会,如果 sec 值为 0 则不会。 计时器应该例如从 100 数到 0。如果值 == 0 或按下停止按钮,计时器应该停止!但它继续计数。

我的错误在哪里? 我尝试了不同的方法,但没有任何效果。

代码如下:

在 .h 文件中

@property (weak, nonatomic) NSTimer *countdownTimer;

在 .m 文件中

- (void)timer {

    sec = sec - 1;
    int minutes = sec / 60;
    int seconds = sec - (minutes * 60);

    [_timerLabel setText:[NSString stringWithFormat:@"%02d:%02d",minutes,seconds]];

    if (sec == 0) {
        [_countdownTimer invalidate];
        _countdownTimer = nil;
    }
}

- (void)startTimer {

    _countdownTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timer) userInfo:nil repeats:YES];
}

- (IBAction)startButtonPressed:(id)sender {

    [self startTimer];
    [_startButton setHidden:YES];
    [_stopButton setHidden:NO];
}

- (IBAction)stopButtonPressed:(id)sender {

    [_stopButton setHidden:YES];
    [_countdownTimer invalidate];
    [_startButton setHidden:NO];
}

谢谢!

我试过这段代码,它运行良好,当你按下停止按钮和 sec==0 时,计时器停止;

#import "ViewController.h"

@interface ViewController (){
    NSTimer*_countdownTimer;
    int sec;
}

@property (nonatomic,weak) IBOutlet UILabel*_timerLabel;
@property (nonatomic,weak) IBOutlet UIButton*_startButton;
@property (nonatomic,weak) IBOutlet UIButton*_stopButton;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    sec=100;
}

- (void)timer {

    sec = sec - 1;
    int minutes = sec / 60;
    int seconds = sec - (minutes * 60);

    [self._timerLabel setText:[NSString stringWithFormat:@"%02d:%02d",minutes,seconds]];

    if (sec == 0) {
        [_countdownTimer invalidate];
        _countdownTimer = nil;
    }
}

- (void)startTimer {
    _countdownTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timer) userInfo:nil repeats:YES];
}

- (IBAction)startButtonPressed:(id)sender {
    [self startTimer];
    [self._startButton setHidden:YES];
    [self._stopButton setHidden:NO];
}

- (IBAction)stopButtonPressed:(id)sender {
    [self._stopButton setHidden:YES];
    [_countdownTimer invalidate];
    _countdownTimer=nil;
    [self._startButton setHidden:NO];
}