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];
}
计时器不会停止,在 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];
}