4

可能重复:
NSTimer timerWithTimeInterval:不工作

在我的应用程序中,我有以下设置来使用 NSTimer 运行操作:

在他们中。文件:

@implementation MYViewController {
      NSTimer *aTimer;
}

比,当用户单击相关按钮时,我有:

- (IBAction)userClick:(id)sender {
     aTimer = [NSTimer timerWithTimeInterval:1.0 
                                      target:self 
                                    selector:@selector(doSomethingWithTimer:) 
                                    userInfo:nil 
                                     repeats:YES]; 
     //[aTimer fire]; //NSTimer was fired just once.
}

我也有:

-(void)doSomethingWithTimer:(NSTimer*)timer {
     NSLog(@"something to be done");
}

我希望领事每隔一秒就会有一条线说“要做的事情”。计时器甚至没有被调用一次。我已经尝试使用 [aTimer fire] 触发 NSTimer,但它只会触发一次并且不会像我预期的那样重复。

谁能指导我如何解决这个问题?

4

3 回答 3

9

采用

- (NSTimer *)scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:

然后您不必手动将其添加到运行循环中。

于 2013-01-07T12:32:41.227 回答
4

您需要将计时器添加到运行循环:

[[NSRunLoop mainRunLoop] addTimer:aTimer forMode:NSDefaultRunLoopMode];
于 2013-01-07T12:29:47.653 回答
1

这里的问题是范围。您的aTimer变量必须是一个字段,因此一旦您离开该方法,它就不会被 GC处理,userClick例如

NSTimer *timer;

...

- (IBAction)userClick:(id)sender {
    if (timer != nil && [timer isValid]) {
        [timer invalidate];
        timer = nil;
    }
    timer = [NSTimer scheduledTimerWithTimeInterval:1.0 
                                             target:self 
                                           selector:@selector(doSomethingWithTimer:) 
                                           userInfo:nil 
                                            repeats:YES]; 
}
于 2013-01-07T12:29:42.490 回答