【问题标题】:Extended Runtime Sessions in watchOS stops working after first runwatchOS 中的扩展运行时会话在首次运行后停止工作
【发布时间】:2020-05-07 09:32:01
【问题描述】:

我在使用 WKExtendedRuntimeSession 时遇到了一些问题。

  1. 我在我的 ExtensionDelegate 中设置了WKExtendedRuntimeSessionDelegate
  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
    }

【问题讨论】:

    标签: delegates swiftui watchos watchos-6


    【解决方案1】:

    根据 Apple 文档:

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

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

    这样做:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多