我有一个启动按钮,它从.h文件中声明的计时器开始。然后我有一个停止按钮,它执行[theTimer invalidate];
,然后当我再次使用启动按钮启动计时器时,由于失效而导致错误。
任何想法如何解决这个问题?
答案 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(@ “平”); }