1

我在使用 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
    }
4

1 回答 1

2

根据 Apple 文档:

调用 invalidate() 后,您将无法再运行会话。而是创建并开始一个新会话。

https://developer.apple.com/documentation/watchkit/wkextendedruntimesession/3131065-invalidate

所以这样做:

var session: WKExtendedRuntimeSession!

private func startSession() {
    session = WKExtendedRuntimeSession()
    session.delegate = self
    session.start()
}
于 2020-06-29T22:10:13.657 回答