2013-07-25 36 views
2

我使用NSTimer來定期在後臺下載數據,當啓用wifi時。 但是,也可以選擇按下手動下載數據的按鈕。因此可以啓用和禁用autoupdater。 當某個時間段被自動更新時間所「中斷」時,我想要在啓用時間點之後的這段時間的剩餘時間結束時安排下一次更新。 由於NSTimer沒有暫停方法,我使用NSTimer的initWithFireDate方法。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)具有正確的值。

我在做什麼錯?

最好的問候, 費邊

+0

我很抱歉,但它是很難理解你在說什麼。有什麼特別的錯誤? –

+0

你是說timerTick:永遠不會被你的計時器調用嗎? – bneely

回答

0

你必須做你的計時器添加到運行循環如下:

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