1

我的倒数计时器有一个奇怪的问题。此计时器从设定的时间(即 60 秒)开始倒计时。这段代码放在 myViewDidLoad 方法中。除非我返回并再次加载视图,否则一切正常。每次加载视图时,倒计时都会增加 1 秒。

例如:

  1. 第一次加载:60、59、58...
  2. 第二次加载:60、58、56...
  3. 第三次加载:60、57、54...

我的代码如下。有谁知道为什么会这样?我需要在某个地方发布一些东西吗?谢谢!

countDown=[NSTimer scheduledTimerWithTimeInterval:1.0 target:self 
selector:@selector(TimeOver) userInfo:nil repeats:YES];
4

1 回答 1

6

每次加载视图时,都会创建一个新计时器,但旧计时器仍然存在。在计时器的操作方法中TimeOver,您正在递减一个跟踪秒数的索引变量,并且每个计时器在每次触发时都会运行该方法。因此,如果您有三个计时器,则索引将每次减少三个。

您需要在视图加载时不要创建新的计时器,或者最好在视图消失时销毁计时器:

[countDown invalidate];
countdown = nil;

并在它重新出现时重新创建它。

另外,请注意您的计时器的操作方法具有不正确的签名。它应该是一个不返回任何内容并接受一个参数的方法,即计时器本身,如下所示:

- (void)timeOver: (NSTimer *)tim;

此外,Cocoa 方法不应以大写字母开头。

于 2013-02-04T02:34:59.453 回答