Расширенные сеансы выполнения в watchOS перестают работать после первого запуска

У меня проблемы с 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 ответ

В соответствии с документами 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()
}

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

Другие вопросы по тегам