У меня есть приложение, которое запускает таймер, и таймер должен продолжать работать, даже если приложение завершает работу или телефон выключен. Итак, я пытаюсь это сделать, используя shouldSaveApplicationState
и shouldRestoreApplicationState
. Я добавил оба метода и willFinishLaunchingWithOptions
к моему appDelegate, и я установил идентификаторы восстановления для каждого контроллера вида, контроллера навигации и контроллера панели вкладок. Тогда на контроллере представления, я хочу, чтобы восстановить я сделал это:Состояние восстановления работает только при подключении к Xcode
override func encodeRestorableStateWithCoder(coder: NSCoder) {
coder.encodeObject(startDate, forKey: "startDate")
coder.encodeObject(startTime, forKey: "startTime")
coder.encodeObject(elapsedTime, forKey: "elapsedTime")
coder.encodeObject(playing, forKey: "playing")
coder.encodeObject(timerLabel.text, forKey: "timerLabelText")
super.encodeRestorableStateWithCoder(coder)
}
override func decodeRestorableStateWithCoder(coder: NSCoder) {
startDate = coder.decodeObjectForKey("startDate") as! NSDate
startTime = coder.decodeObjectForKey("startTime") as! NSTimeInterval
elapsedTime = coder.decodeObjectForKey("elapsedTime") as! NSTimeInterval
playing = coder.decodeObjectForKey("playing") as! Bool
timerLabel.text = (coder.decodeObjectForKey("timerLabelText") as! String)
super.decodeRestorableStateWithCoder(coder)
}
override func applicationFinishedRestoringState() {
if playing {
elapsedTime += startDate.timeIntervalSinceNow
play()
}
}
Теперь вот странная часть. Когда мой телефон подключен к Xcode, и я использую кнопки воспроизведения и остановки Xcode для запуска и выхода из приложения, все работает так, как должно. Когда я пытаюсь сделать то же самое с телефоном, отключенным от Xcode, это похоже на то, что я даже не настроил восстановление состояния, приложение полностью игнорирует его и просто показывает первый контроллер представления. И я даже не могу отлаживать, потому что, когда я подключаю телефон к Xcode, он работает. То же самое происходит и с симулятором. Если я использую кнопки Xcode, восстановление работает. Если я просто открываю и закрываю приложение из самого симулятора, это не так.
Любые идеи?
Ах! Дурак я. Я часами читал о государственной реставрации, пытаясь понять это, и никто никогда не упоминал об этом. Но это имеет смысл. Вместо того, чтобы убивать приложение, я попытался перезапустить телефон, и все работает так, как должно. Благодаря! Но теперь мне нужно найти другой способ, чтобы таймер работал, если пользователь убил приложение. Какие-либо предложения? – dbmrq
Вы хотите, чтобы таймер работал, даже если ваше приложение завершено?Единственное, что приходит на ум, - это сохранить текущую дату (сгенерированную с помощью NSDate() ') через регулярные промежутки времени, а когда приложение перезагрузится, прочитайте это значение и вычислите и вычислите прошедшее время, чтобы как-то« взять на себя где вы ушли «...? –
Да, и мне также нужно будет показать правильный контроллер. Хорошо, я попытаюсь понять это, если не могу, я отправлю еще один вопрос. Спасибо за помощь! – dbmrq