NSTimer not firing

前端 未结 3 1280
野趣味
野趣味 2020-12-11 03:13

I have an NSTimer that I init with this code:

testTimer = [[NSTimer alloc] initWithFireDate:[new objectAtIndex:0] interval:0.0 target:self selector:@selector         


        
相关标签:
3条回答
  • 2020-12-11 03:34

    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.

    0 讨论(0)
  • 2020-12-11 03:36

    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

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{})
    

    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

    timer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(...) userInfo:nil repeats:YES];
    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
    
    0 讨论(0)
  • 2020-12-11 03:37

    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.

    0 讨论(0)
提交回复
热议问题