我正在设置一个计时器以在将来运行特定功能,如下所示:
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”。
尽管所有这一切对我来说似乎都是错误的(对其他人来说可能是一个有趣的观察),但问题是我如何确保计时器一旦注意到它的触发日期已经过去就触发(即我如何确保我的当有人将时钟移过预定的触发日期时,计时器将触发)。