开始按钮启动NSTimer,停止按钮停止它,开始按钮再次启动它。但'invalidate'给我一个错误?

时间:2011-02-10 04:10:57

标签: iphone objective-c cocoa-touch nstimer

我有一个启动按钮,它从.h文件中声明的计时器开始。然后我有一个停止按钮,它执行[theTimer invalidate];,然后当我再次使用启动按钮启动计时器时,由于失效而导致错误。

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

2 个答案:

答案 0 :(得分:5)

API documentation在这一点上非常具体:
一旦失效,计时器对象就无法重复使用。

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

答案 1 :(得分:2)

使用NSTimer类有点尴尬;它不是将创建/破坏与开始/停止分开,而是将它们全部组合在一起。换句话说,计时器一旦创建就会立即启动,并在计时器被销毁后立即停止。

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

//私人方法

  

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

     

@implementation MyClass

     
      
  • (IBAction为)startTimer所:(ID)发送方   {   if(_timer == nil)   {       _timer = [NSTimer scheduledTimerWithTimeInterval:1.0f                                                 目标:自                                               选择器:@selector(_timerFired)                                               用户信息:无                                                重复:是]保留];   }   }

  •   
  • (IBAction为)stopTimer:(ID)发送方   {   if(_timer!= nil)   {       [_timer invalidate];       _timer = nil;   }   }

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

  •