NSTimer initWithFireDate无法正常工作

时间:2013-07-25 15:08:47

标签: ios objective-c nstimer

当启用wifi时,我使用NSTimer定期在后台下载数据。 但是,也可以选择按下手动下载数据的按钮。因此,可以启用和禁用自动转换器。 通过对自动更新进行“中断”来延长时间段时,我希望在启用它的时间点之后的该时间段的剩余时间结束时安排下一次更新。 因为NSTimer没有暂停方法,所以我使用NSTimer的initWithFireDate方法。

timer = [[NSTimer alloc] initWithFireDate:fireDate interval:updateFrequency target:self selector:@selector(timerTick:) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

fireDate肯定是在给定日期之后:

NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:remainingWaitingTime];

尽管如此,计时器在计时器初始化后进行调度。我正在禁用计时器并按以下方式计算剩余时间:

NSDate *lastFireDate = [timer fireDate];
NSDate *current = [NSDate date];
[timer invalidate];
double timeSinceLastFire = [current timeIntervalSinceDate:lastFireDate];
remainingWaitingTime = updateFrequency - timeSinceLastFire;

计算的时间(remainingWaitingTime)具有正确的值。

我做错了什么?

最诚挚的问候, 费边

1 个答案:

答案 0 :(得分:1)

您必须通过执行以下操作将计时器添加到运行循环中:

[[NSRunLoop currentRunLoop] addTimer: timer forMode: NSDefaultRunLoopMode];