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».

Хотя все это кажется мне неправильным (и может быть интересным наблюдением для других), вопрос заключается в том, как я могу гарантировать, что таймер срабатывает, как только он замечает, что дата его срабатывания уже в прошлом (т.е. как я могу гарантировать, что мой таймер срабатывает Таймер сработает, когда кто-нибудь переместит часы после запланированной даты стрельбы).

Ответы на вопрос(1)

Ваш ответ на вопрос