【问题标题】:Start WKExtendedRuntimeSession (WKExtendedRuntimeObject was dealloced while running)启动 WKExtendedRuntimeSession(WKExtendedRuntimeObject 在运行时被释放)
【发布时间】:2022-12-01 08:25:29
【问题描述】:

我尝试启动时遇到问题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();
    }

    ...
}

【问题讨论】:

  • 请阐明您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: ios swift swiftui watchos wkextension


【解决方案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()

【讨论】:

    猜你喜欢
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多