NSTimer: Начало стрельбы НЕ действует задним числом - PullRequest
0 голосов
/ 22 июля 2010

В настоящее время я использую фрагмент кода, представленный ниже, чтобы запускать некоторые методы каждую секунду. Мое приложение работает в фоновом режиме. Проблема в том, что если компьютер просыпается после периода ожидания, таймер хочет задним числом запустить все пропущенные методы. Подобные проблемы возникают, если пользователь должен изменить время системных часов.

По сути, я хочу реализовать правильный метод таймера, который будет вызывать мои методы только каждую текущую секунду d. Если прошла секунда (или минута, или час, или день) и по какой-либо причине методы не были вызваны, я хочу, чтобы мое приложение продолжало работу с текущего момента времени.

Кроме того, можем ли мы сохранить это при использовании NSTimer?

Спасибо!

-(void)start
 {
      NSTimer * timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(tasks:) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode: NSDefaultRunLoopMode];
 }

Ответы [ 2 ]

0 голосов
/ 22 июля 2010

Для обработки больших изменений времени вы можете использовать ссылку UIApplicationSignificantTimeChangeNotification и отменить регистрацию / перерегистрацию таймера.

0 голосов
/ 22 июля 2010

Чтобы справиться с проблемой сна, вы можете отменить регистрацию, а затем перерегистрировать свой таймер всякий раз, когда машина переходит в режим сна и просыпается. См. техническое примечание для получения информации о том, как это сделать. Однако это решение не будет работать для изменения системного времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...