2016-09-12 2 views
0

У меня есть NSTimer, чтобы стрелять каждую секунду. Используя Simulator, это вызовет метод eachSecond() правильно после перехода от приложения, нажав кнопку home. Тем не менее, на реальном iPhone 6, как только я перемещаюсь, everySeconds не вызывается снова, пока приложение не будет открыто снова.NSTimer не срабатывает после нажатия кнопки дома

Почему это может быть по-другому на реальном устройстве? Есть ли способ гарантировать, что он будет срабатывать каждую секунду в этом случае?

Его приложение для фитнеса, поэтому необходимо записывать продолжительность, когда телефон блокируется, или пользователь мгновенно перемещается.

Спасибо,

lazy var timer = NSTimer() 

fun init() { 
    timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(RunViewController.eachSecond(_:)), userInfo: nil, repeats: true) 
} 

func eachSecond() { 
// update UI etc. 
} 

ответ

5

NSTimer не срабатывает при приостановке приложения. Выполнение фона при работе под XCode отличается; ограничения фона не применяются.

Для того, чтобы определить, сколько времени прошло, пока приложение приостановлено, вы можете хранить метку время в applicationDidEnterBackground и вычислить истекшее время, основываясь на разнице между сохраненной временной меткой и текущим временем в applicationWillEnterForeground

-2

поставить линию на вашей баттона Действие таймера = NSTimer.scheduledTimerWithTimeInterval (1, цель: самостоятельно, селектор: #selector (RunViewController.eachSecond (_ :)), USERINFO: ноль , repeatts: true) timer.fire()

0

Вам необходимо добавить таймер в основной цикл запуска.

func init() { 
    timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(RunViewController.eachSecond(_:)), userInfo: nil, repeats: true) 

    NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes) 
} 
+0

The 'scheduledTimerWithTimeInterval 'функция уже добавляет таймер в цикл выполнения. – dan

Смежные вопросы