Запустите 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 ответ

Я столкнулся с той же проблемой. Вот мое решение.

  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()
    }
}
  1. Инициируйте синглтон. Вы можете сделать это в .appear() или в вашем WKApplicationDelegate applicationDidBecomeActive()

_ = ExtendedRunTime.shared

  1. Начать сеанс там, где это необходимо

ExtendedRunTime.shared.start()

  1. Обязательно остановите его, когда закончите

ExtendedRunTime.shared.stop()

Другие вопросы по тегам