试图停用NSTimer

时间:2014-06-13 14:10:49

标签: objective-c

我正在使用NSTimer运行循环计数,然后在某些时候(单击“开始”)我需要再次运行它。第一个计时器没有停止,因此倒计时速度随着每次运行功能而增加

- (IBAction)startbutton:(id)sender {

    timeTick = arc4random_uniform(7)+3;
    timeofstart = CACurrentMediaTime();

    chosentime = timeTick;
    NSLog(@"chosentime værdien er %f", chosentime);


    [timer invalidate];
    timer = nil;

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

}


- (void) tick {

  if (timeTick == 0) {
    winnerlabel2.text = @"GO !!!";

  }
  else {
    timeTick --;
    NSLog(@"%f", timeTick);
  }

}

1 个答案:

答案 0 :(得分:1)

在这里,不清楚timer在前两行中是指什么。第3行是创建一个新的局部变量。看起来你必须有一个在其他地方创建的实例变量timer。您正在使该计时器无效,但随后创建一个新的timer作为没有永久句柄的局部变量(因为它在此方法调用结束时超出范围后死亡)并因此在第一个计时器之后的每个计时器失效。

[timer invalidate];
timer = nil;

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

从......改变第3行

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

为...

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