Brak daty pożaru NSTimer, gdy zegar jest ręcznie przestawiany do przodu
Ustawiam zegar, aby w przyszłości uruchomić określoną funkcję, taką jak ta:
pingTimer = [[NSTimer alloc] initWithFireDate:pingAtDate
interval:0
target:self
selector:@selector(ping:)
userInfo:nil
repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:pingTimer forMode:NSDefaultRunLoopMode];
Data ta przypada w przybliżeniu na 1 tydzień w przyszłości, więc do celów testowych I (i inni) ustawiamy zegar systemowy o 8 dni do przodu, aby upewnić się, że wystąpi określone zdarzenie. Problem polega na tym, że tak się nie dzieje.
Planując kilka minut w przyszłości, zauważyłem, że timer nadal się wyłącza, ale wydaje się, że wyłącza się po określonej liczbie minut. Powiedzmy, że zaplanowałem czas na datę 5 minut w przyszłości, a następnie przestawię zegar o 1 godzinę do przodu, zegar faktycznie wystrzeliwuje 5 minut później, ale ponieważ przestawiłem zegar o 1 godzinę do przodu, czas jego wystrzelenia nie wyrównuje się z czasem, w którym zaplanowano wystrzelenie.
To nie jest to, czego mógłbym się spodziewać, ponieważ nazywam „initWithFireDate”.
Chociaż wszystko to wydaje mi się niewłaściwe (i może być interesującą obserwacją dla innych), pytanie brzmi, w jaki sposób mogę się upewnić, że timer wystrzeliwuje, gdy tylko zauważy, że jego data pożaru przypada w przeszłości (tj. Jak zapewnić, że moja timer będzie strzelał, gdy ktoś poruszy zegar po zaplanowanej dacie strzelania).