Расширенная сессия времени выполнения в watchOS - PullRequest
2 голосов
/ 07 марта 2020

Я пытаюсь запустить расширенную сессию во время выполнения нажатием кнопки и сделать ее недействительной после истечения таймера. Это работает - один раз. Однако, когда я снова нажимаю кнопку, я получаю сообщение об ошибке.

У меня такое ощущение, что мне нужно создать новый экземпляр сеанса, похожий на { ссылка }, но я не уверен how.

Вот что я попробовал до сих пор:

Согласно: Использование расширенных сеансов во время выполнения - Документация Apple

Я установил фоновый режим в Расширение WatchKit для самообслуживания. Background Mode: Self Care

Весь код, связанный с сеансом:

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. уведомляющий делегат. Ошибка (ноль)

Как только приложение пытается сделать сеанс недействительным, я получаю следующие блоки:

Console

Как начать новый сеанс после того, как сеанс признан недействительным?

1 Ответ

1 голос
/ 07 марта 2020

Изучив пример кода SpeedySloth от Apple: создание кода тренировки , я изменил свой код на следующий:

class InterfaceController: WKInterfaceController, WKExtendedRuntimeSessionDelegate {

    var session: WKExtendedRuntimeSession!

    @IBAction func startTimerButtonPressed() {
        session = WKExtendedRuntimeSession()
        session.delegate = self
        session.start()
    }
}

Поскольку я новичок в разработке приложений, я пока не знаю, почему это работает, но работает.

Сеансы запускаются и аннулируются снова и снова без проблем.

...