Ios NSTimer initWithFireDate工作不正常

Ios NSTimer initWithFireDate工作不正常,ios,objective-c,nstimer,Ios,Objective C,Nstimer,我使用NSTimer在启用wifi时定期在后台下载数据。 但是,也可以选择按下手动下载数据的按钮。因此,可以启用和禁用自动更新程序。 当一个时间段被自动更新“中断”时,我想在启用该时间段后的剩余时间结束时安排下一次更新。 因为NSTimer没有pause方法,所以我使用了NSTimer的initWithFireDate方法 timer = [[NSTimer alloc] initWithFireDate:fireDate interval:updateFrequency target:self

我使用
NSTimer
在启用wifi时定期在后台下载数据。 但是,也可以选择按下手动下载数据的按钮。因此,可以启用和禁用自动更新程序。 当一个时间段被自动更新“中断”时,我想在启用该时间段后的剩余时间结束时安排下一次更新。 因为NSTimer没有pause方法,所以我使用了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)具有正确的值

我做错了什么

致以最良好的祝愿,
Fabian

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

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

对不起,你说的话很难理解。具体出了什么问题?你是说timerTick:你的计时器从未调用过?