watchOS 中的扩展运行时会话在首次运行后停止工作
Posted
技术标签:
【中文标题】watchOS 中的扩展运行时会话在首次运行后停止工作【英文标题】:Extended Runtime Sessions in watchOS stops working after first run 【发布时间】:2020-05-07 09:32:01 【问题描述】:我在使用 WKExtendedRuntimeSession 时遇到了一些问题。
-
我在我的 ExtensionDelegate 中设置了
WKExtendedRuntimeSessionDelegate
当应用程序处于活动状态时,我使用.start()
启动会话
我使用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/wkextendedruntimesession/3131065-invalidate
这样做:
var session: WKExtendedRuntimeSession!
private func startSession()
session = WKExtendedRuntimeSession()
session.delegate = self
session.start()
【讨论】:
以上是关于watchOS 中的扩展运行时会话在首次运行后停止工作的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2017在首次运行时未显示编译异常
Swift Scene Delegate 在首次启动时不运行代码
调用 `FIRApp.configure()` 时应用程序在首次运行时崩溃