我有一個重複的計時器,可以運行時鐘。在時鐘運行期間,我打電話給stopTimer,時鐘應該停止。這已經在iPhone上運行了100%,但是在iPad上它有時會無法停止計時器。大約有50%的時間發生這種情況。 在停止方法中調用NSLog。NSTimer不會在iPad上失效,但在iPhone上工作正常
這裏是我的計時器代碼:
- (void)startSliderTimer
{
// Get start time
[self stopTimer];
startTime = [NSDate timeIntervalSinceReferenceDate] + kmaxTimePerSlider;
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.01f target:self selector:@selector(updateClock) userInfo:nil repeats:YES];
}
- (void)updateClock
{
NSTimeInterval currentTimer = [NSDate timeIntervalSinceReferenceDate];
NSTimeInterval currentTimeLeft = startTime - currentTimer;
if (currentTimeLeft >= 0) {
int seconds = currentTimeLeft;
float milliseconds = currentTimeLeft - seconds;
int mill = milliseconds * 1000;
NSString* displayTime = [NSString stringWithFormat: @"%02d:%03d",seconds,mill];
timerLbl.text = displayTime;
} else {
[self tooSlow];
}
}
- (void) stopTimer
{
NSLog(@"%s",__FUNCTION__);
if (self.timer) {
NSLog(@"Stop Timer");
[self.timer invalidate];
self.timer = nil;
}
}
我剛纔試圖運行這樣的計時器作爲另一提問/回答的建議,但它仍然不能總是無效:
self.timer = [NSTimer timerWithTimeInterval:0.01f target:self selector:@selector(updateClock) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
您的應用程序在計時器期間是否發生任何滾動?這觸發了一種不同類型的runloop,這會導致計時器不能開火或遲到。 – kevboh
是的,整個遊戲都基於滾動! 計時器觸發得很好,因爲時鐘每0.01秒更新一次。我檢查了.isValid屬性,它是有效的,因此必須是運行循環問題。爲什麼這隻會在iPad上有所不同?我能做些什麼來解決它(在另一個運行循環中運行定時器?) – Darren
對不起,它不是滾動,我正在使用UISliders。 – Darren