У меня есть повторяющийся таймер, который работает по часам. Во время работы часов я вызываю stopTimer, и часы должны останавливаться. Это на 100% работает на iPhone, однако на iPad он иногда не сможет остановить таймер. Это происходит примерно в 50% случаев. NSLogs вызывается в методе остановки.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