Расширенные сеансы выполнения в watchOS перестают работать после первого запуска - PullRequest
0 голосов
/ 07 мая 2020

У меня проблемы с WKExtendedRuntimeSession.

  1. Я установил WKExtendedRuntimeSessionDelegate в моем ExtensionDelegate
  2. Я запускаю сеанс, когда приложение активно с .start()
  3. Я останавливаю сеансы, используя session.invalidate()

Когда я запускаю его снова, я получаю следующую ошибку:

-[WKExtendedRuntimeSession _start]:308: Unable to start sessions because state == WKExtendedRuntimeSessionStateInvalid. notifying delegate <MYAPP_Extension.ExtensionDelegate: 0x17e663d0>. Error is (null)

КОД

Мой делегат по добавочному номеру

var session = WKExtendedRuntimeSession()

class ExtensionDelegate: NSObject, WKExtensionDelegate, WKExtendedRuntimeSessionDelegate {

    func extendedRuntimeSession(_ extendedRuntimeSession: WKExtendedRuntimeSession, didInvalidateWith reason: WKExtendedRuntimeSessionInvalidationReason, error: Error?) {
        print("Session stopped at", Date())
    }

    func extendedRuntimeSessionDidStart(_ extendedRuntimeSession: WKExtendedRuntimeSession) {
        print("Session started at", Date())
    }

    func extendedRuntimeSessionWillExpire(_ extendedRuntimeSession: WKExtendedRuntimeSession) {

    }

    func applicationDidBecomeActive() {

        session.delegate = self
    }

Мой старт происходит .onAppear(perform:{ session.start() })

Отмена:

func cancelNow() {
        self.timer.connect().cancel()
        session.invalidate()
        return
    }

1 Ответ

0 голосов
/ 30 июня 2020

Согласно документации Apple: После вызова invalidate () вы больше не можете запускать сеанс. Вместо этого создайте и начните новый сеанс.

https://developer.apple.com/documentation/watchkit/using_extended_runtime_sessions

Итак, сделайте следующее:

var session: WKExtendedRuntimeSession!

private func startSession() {
    session = WKExtendedRuntimeSession()
    session.delegate = self
    session.start()
}

Надеюсь, это поможет.

...