watchOS 中的扩展运行时会话
Extended Runtime Session in watchOS
我正在尝试通过按下按钮来启动扩展的运行时会话,并在计时器用完后使其无效。
它有效——一次。但是,一旦我再次单击该按钮,就会收到一条错误消息。
我觉得我需要创建一个新的会话实例,类似于 ,但我不确定如何。
这是我到目前为止尝试过的:
根据:
Using Extended Runtime Sessions - Apple Documentation
我在 WatchKit Extension 中将后台模式设置为 Self Care。
所有会话相关代码:
class InterfaceController: WKInterfaceController, WKExtendedRuntimeSessionDelegate {
var session = WKExtendedRuntimeSession()
var time = 15
var timer = Timer()
func extendedRuntimeSession(_ extendedRuntimeSession: WKExtendedRuntimeSession, didInvalidateWith reason: WKExtendedRuntimeSessionInvalidationReason, error: Error?) {
print("Session stopped at", Date())
}
func extendedRuntimeSessionDidStart(_ extendedRuntimeSession: WKExtendedRuntimeSession) {
print("Session started at", Date())
}
@IBAction func startTimerButtonPressed() {
session.delegate = self
session.start()
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(action), userInfo: nil, repeats: true)
}
@objc func action() {
if time < 1 {
WKInterfaceDevice.current().play(.stop)
timer.invalidate()
time = 15
session.invalidate()
} else {
time -= 1
}
}
第一个会话开始并像我希望的那样失效并打印到控制台。
尝试开始新会话时出现以下错误消息:
2020-03-07 11:03:43.833270-0600 GymTimeTest WatchKit Extension[8539:705092] [default] -[WKExtendedRuntimeSession _start]:308: Unable to start sessions because state == WKExtendedRuntimeSessionStateInvalid. notifying delegate . Error is (null)
应用程序尝试使会话无效后,我得到以下块:
会话失效后如何开始新会话?
学习了 Apple 的 SpeedySloth: Creating a Workout 示例代码后,我将代码更改为:
class InterfaceController: WKInterfaceController, WKExtendedRuntimeSessionDelegate {
var session: WKExtendedRuntimeSession!
@IBAction func startTimerButtonPressed() {
session = WKExtendedRuntimeSession()
session.delegate = self
session.start()
}
}
由于我是应用程序开发的新手,我还不知道为什么会这样,但确实如此。
会话一次又一次地启动和失效,没有任何问题。
我正在尝试通过按下按钮来启动扩展的运行时会话,并在计时器用完后使其无效。 它有效——一次。但是,一旦我再次单击该按钮,就会收到一条错误消息。
我觉得我需要创建一个新的会话实例,类似于
这是我到目前为止尝试过的:
根据: Using Extended Runtime Sessions - Apple Documentation
我在 WatchKit Extension 中将后台模式设置为 Self Care。
所有会话相关代码:
class InterfaceController: WKInterfaceController, WKExtendedRuntimeSessionDelegate {
var session = WKExtendedRuntimeSession()
var time = 15
var timer = Timer()
func extendedRuntimeSession(_ extendedRuntimeSession: WKExtendedRuntimeSession, didInvalidateWith reason: WKExtendedRuntimeSessionInvalidationReason, error: Error?) {
print("Session stopped at", Date())
}
func extendedRuntimeSessionDidStart(_ extendedRuntimeSession: WKExtendedRuntimeSession) {
print("Session started at", Date())
}
@IBAction func startTimerButtonPressed() {
session.delegate = self
session.start()
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(action), userInfo: nil, repeats: true)
}
@objc func action() {
if time < 1 {
WKInterfaceDevice.current().play(.stop)
timer.invalidate()
time = 15
session.invalidate()
} else {
time -= 1
}
}
第一个会话开始并像我希望的那样失效并打印到控制台。 尝试开始新会话时出现以下错误消息:
2020-03-07 11:03:43.833270-0600 GymTimeTest WatchKit Extension[8539:705092] [default] -[WKExtendedRuntimeSession _start]:308: Unable to start sessions because state == WKExtendedRuntimeSessionStateInvalid. notifying delegate . Error is (null)
应用程序尝试使会话无效后,我得到以下块:
会话失效后如何开始新会话?
学习了 Apple 的 SpeedySloth: Creating a Workout 示例代码后,我将代码更改为:
class InterfaceController: WKInterfaceController, WKExtendedRuntimeSessionDelegate {
var session: WKExtendedRuntimeSession!
@IBAction func startTimerButtonPressed() {
session = WKExtendedRuntimeSession()
session.delegate = self
session.start()
}
}
由于我是应用程序开发的新手,我还不知道为什么会这样,但确实如此。
会话一次又一次地启动和失效,没有任何问题。