NSTimer пропускает дату срабатывания, когда часы переведены вручную
Я устанавливаю таймер для запуска определенной функции в будущем, например:
pingTimer = [[NSTimer alloc] initWithFireDate:pingAtDate
interval:0
target:self
selector:@selector(ping:)
userInfo:nil
repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:pingTimer forMode:NSDefaultRunLoopMode];
В будущем это будет примерно 1 неделя, поэтому в целях тестирования я (и другие) настраивал системные часы на 8 дней, чтобы гарантировать, что указанное событие произойдет. Проблема в том, что этого не происходит.
При планировании нескольких минут в будущем я заметил, что таймер все еще выключается, но, кажется, он выключается через определенное количество минут. Скажем, я планирую таймер на дату на 5 минут в будущем, затем я устанавливаю часы на 1 час вперед, таймер на самом деле срабатывает на 5 минут позже, но, поскольку я устанавливаю часы на 1 час, время, на которое они срабатывают, больше не выравнивается. со временем, когда было запланировано стрелять по.
Это не то, что я ожидаю, так как я называю «initWithFireDate».
Хотя все это кажется мне неправильным (и может быть интересным наблюдением для других), вопрос заключается в том, как я могу гарантировать, что таймер срабатывает, как только он замечает, что дата его срабатывания уже в прошлом (т.е. как я могу гарантировать, что мой таймер срабатывает Таймер сработает, когда кто-нибудь переместит часы после запланированной даты стрельбы).