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?
I think I had the same problem as Dobler, but my solution was different.
The problem was that the timer was being created and scheduled in a GCD thread in a block within a
call (actually nested deep, so it wasn't obvious that this was the case).
Using
NSTimer's scheduledTimerWithTimeInterval:...
placed the timer into an invalid run loop.The fix was to change to
You will have to add it to the current run loop if you use
initWith..
method to create the timer object.Or if you would like it set up for you, use the
scheduled...
methods to create your timer.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.