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