Запустите WKExtendedRuntimeSession (WKExtendedRuntimeObject был освобожден во время работы)
У меня проблема, когда я пытаюсь начатьWKExtendedRuntimeSession
-[WKExtendedRuntimeSession dealloc]:285: WKExtendedRuntimeObject was dealloced while running. Invalidating the session 46EB2DE0-311C-41D0-93BE-46FE744B685A
class SessionCoordinator: NSObject, WKExtendedRuntimeSessionDelegate {
let runtimeSession = WKExtendedRuntimeSession();
override init() {
super.init()
runtimeSession.delegate = self;
runtimeSession.start();
}
...
}
1 ответ
Я столкнулся с той же проблемой. Вот мое решение.
- Создайте простой одноэлементный класс для управления WKExtendedRuntimeSession.
import Foundation
import SwiftUI
class ExtendedRunTime: NSObject, WKExtendedRuntimeSessionDelegate {
static let shared = ExtendedRunTime()
let session: WKExtendedRuntimeSession
override init() {
// Create the session object.
session = WKExtendedRuntimeSession()
super.init()
// Assign the delegate.
session.delegate = self
}
func extendedRuntimeSession(_ extendedRuntimeSession: WKExtendedRuntimeSession, didInvalidateWith reason: WKExtendedRuntimeSessionInvalidationReason, error: Error?) {
print("didInvalidateWithReason: \(reason)")
}
func extendedRuntimeSessionDidStart(_ extendedRuntimeSession: WKExtendedRuntimeSession) {
print("extendedRuntimeSessionDidStart")
}
func extendedRuntimeSessionWillExpire(_ extendedRuntimeSession: WKExtendedRuntimeSession) {
print("extendedRuntimeSessionWillExpire")
}
func start() {
session.start()
}
func stop() {
session.invalidate()
}
}
- Инициируйте синглтон. Вы можете сделать это в .appear() или в вашем WKApplicationDelegate applicationDidBecomeActive()
_ = ExtendedRunTime.shared
- Начать сеанс там, где это необходимо
ExtendedRunTime.shared.start()
- Обязательно остановите его, когда закончите
ExtendedRunTime.shared.stop()