Я пытаюсь запустить расширенную сессию во время выполнения нажатием кнопки и сделать ее недействительной после истечения таймера. Это работает - один раз. Однако, когда я снова нажимаю кнопку, я получаю сообщение об ошибке.
У меня такое ощущение, что мне нужно создать новый экземпляр сеанса, похожий на { ссылка }, но я не уверен how.
Вот что я попробовал до сих пор:
Согласно: Использование расширенных сеансов во время выполнения - Документация Apple
Я установил фоновый режим в Расширение WatchKit для самообслуживания.
Весь код, связанный с сеансом:
class InterfaceController: WKInterfaceController, WKExtendedRuntimeSessionDelegate {
var session = WKExtendedRuntimeSession()
var time = 15
var timer = Timer()
func extendedRuntimeSession(_ extendedRuntimeSession: WKExtendedRuntimeSession, didInvalidateWith reason: WKExtendedRuntimeSessionInvalidationReason, error: Error?) {
print("Session stopped at", Date())
}
func extendedRuntimeSessionDidStart(_ extendedRuntimeSession: WKExtendedRuntimeSession) {
print("Session started at", Date())
}
@IBAction func startTimerButtonPressed() {
session.delegate = self
session.start()
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(action), userInfo: nil, repeats: true)
}
@objc func action() {
if time < 1 {
WKInterfaceDevice.current().play(.stop)
timer.invalidate()
time = 15
session.invalidate()
} else {
time -= 1
}
}
Первый сеанс запускается и становится недействительным, как я хочу, и печатает в консоли. При попытке начать новый сеанс я получаю следующее сообщение об ошибке:
2020-03-07 11: 03: 43.833270-0600 Расширение GymTimeTest WatchKit [8539: 705092] [по умолчанию] - [WKExtendedRuntimeSession _start ]: 308: невозможно запустить сеанс, так как состояние == WKExtendedRuntimeSessionStateInvalid. уведомляющий делегат. Ошибка (ноль)
Как только приложение пытается сделать сеанс недействительным, я получаю следующие блоки:
Как начать новый сеанс после того, как сеанс признан недействительным?