2011-02-10 69 views
2

我有一个启动按钮,以.h文件中声明的计时器开始。然后,我有一个停止按钮,它不会执行[theTimer invalidate];,然后当我用启动按钮再次启动计时器时,由于被无效而导致错误。启动按钮启动NSTimer,停止按钮停止它,启动按钮再次启动它。但'无效'给我一个错误?

任何想法如何解决这个问题?

+0

后您正在使用的代码示例。 – WrightsCS 2011-02-10 04:12:46

+0

@Nikita Rybak有正确的答案。你可能会得到一个更详细的答案,@安德鲁,如果你发布你的code_。 – aqua 2011-02-10 04:18:33

回答

5

API documentation在这一点上是非常具体的:
一旦失效,定时器对象不能重用。

所以,只需创建一个新的计时器。如果你只在用户按下按钮时才这样做,它不会杀死你的表现。

2

NSTimer类的使用有些尴尬;而不是将创建/销毁与开始/停止分开,而是全部汇集在一起​​。换句话说,计时器一旦创建就立即启动,一旦它被销毁就停下来。

因此,您需要使用NSTimer对象的存在作为标志来指示它是否正在运行;是这样的:

//私有方法

@interface MyClass的(){ 的NSTimer * _timer; } - (void)_timerFired; @end

@implementation MyClass的

  • (IBAction为)startTimer所:(ID)发送方 { 如果(_timer ==无) { _timer = [的NSTimer scheduledTimerWithTimeInterval:1.0F 目标: self selector:@selector(_timerFired) userInfo:nil repeats:YES] retain]; } }

  • (IBAction为)stopTimer:(ID)发送方 { 如果(!_timer =无) { [_timer无效]; _timer = nil; } }

  • (无效)_timerFired { 的NSLog(@ “平”); }