Расширенные сеансы выполнения в watchOS перестают работать после первого запуска
У меня проблемы с WKExtendedRuntimeSession.
- Я установил
WKExtendedRuntimeSessionDelegate
в моем ExtensionDelegate - Я запускаю сеанс, когда приложение активно с
.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/using_extended_runtime_sessions
Так сделай это:
var session: WKExtendedRuntimeSession!
private func startSession() {
session = WKExtendedRuntimeSession()
session.delegate = self
session.start()
}
Надеюсь это поможет.