计时器没有重复

时间:2011-11-03 04:00:13

标签: iphone ios

我的计时器没有重复请帮助

这是代码

timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(doAnimation:) userInfo:nil repeats:YES];
[timer fire];

方法

-(void)doAnimation:(id)Sender
{
}

3 个答案:

答案 0 :(得分:6)

[timer fire]仅手动触发计时器一次并且实际上并未“启动”计时器。来自docs

  

您可以使用此方法触发重复计时器,而不会中断其常规发射计划。如果计时器不重复,它会在触发后自动失效,即使它的预定开火日期尚未到来。

在开始触发并重复之前,您需要在运行循环中add the timer

  

您必须使用addTimer:forMode:将新计时器添加到运行循环中。然后,在经过秒秒后,计时器将触发,将消息aSelector发送到目标。 (如果计时器配置为重复,则无需随后将计时器重新添加到运行循环中。)

更简单的方法是做一些事情:

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

-(void)doAnimation:(NSTimer*)timer
{
}

这个automatically schedules计时器并将其添加到运行循环中。如果您没有这样做,因为您已将目标设置为self,您必须确保方法doAnimation在同一个类中定义。

NSTimer Class Reference

答案 1 :(得分:3)

使用timerWithTimeInterval要求您将其附加到运行循环。尝试使用

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

将您的doAnimation方法更改为以下内容:

-(void)doAnimation:(NSTimer *)timer{
         // do Something
}

p.s为什么要告诉它立即开火?我觉得没必要。

答案 2 :(得分:1)

根据细节,我的猜测是你将计时器添加到线程上的运行循环,该线程在1秒钟之前退出。

示例:您在辅助线程上创建计时器,当辅助线程退出时,计时器将被销毁。

当线程死亡时,其运行循环终止,当其运行循环终止时,其定时器无效。

如果是这种情况,可以通过一种简单的方法将其添加到主运行循环中。

在某些情况下,您(当然)会想要在特定的运行循环或线程上使用计时器,但这种误解会给过去的人造成类似的问题。