Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSTimer not firing

I have an NSTimer that I init with this code:

testTimer = [[NSTimer alloc] initWithFireDate:[new objectAtIndex:0] interval:0.0 target:self selector:@selector(works:) userInfo:nil repeats:NO];

[new objectAtIndex:0] is an NSDate in the past.

When I start up the app, the timer is getting created, with a fireDate of immediately (since the date is in the past), however it never calls my works method. (-(void)works:(id)sender )

Anybody know why this is happening?

like image 909
Matt S. Avatar asked Jul 19 '11 18:07

Matt S.


2 Answers

You will have to add it to the current run loop if you use initWith.. method to create the timer object.

NSRunLoop * theRunLoop = [NSRunLoop currentRunLoop];
[theRunLoop addTimer:testTimer forMode:NSDefaultRunLoopMode];

Or if you would like it set up for you, use the scheduled... methods to create your timer.

like image 66
Deepak Danduprolu Avatar answered Oct 11 '22 11:10

Deepak Danduprolu


I just recently had an issue with NSTimer. In my case I didn't realize that the method scheduledTimerWithTimeInterval is not multi thread safe. Once I moved the timer to the main thread it started working.

like image 40
Dobler Avatar answered Oct 11 '22 11:10

Dobler