You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中配置WCSessionDelegate遇到问题求助

解决WCSession提示「WCSession is missing its delegate」且activationDidCompleteWith不触发的问题

核心错误原因

你在PhoneAppDefaults.configure()和WatchAppDefaults.configure()中创建了临时代理对象:

// 错误写法:临时对象执行完后会被ARC立即回收
PhoneWCSessionDelegate().startSession()

WCSession对代理的引用是弱引用(weak var delegate: WCSessionDelegate?),当临时代理被释放后,WCSession找不到代理实例,就会打印「WCSession is missing its delegate」日志,同时activationDidCompleteWith等代理方法也无法触发。

修复方案

需要在单例类中强持有WCSession代理对象,保证其生命周期与App一致。

手机端修改

更新PhoneAppDefaults.swift

添加属性持有代理实例:

import Foundation
import WatchConnectivity

class PhoneAppDefaults {
    static var sharedInstance = PhoneAppDefaults()
    // 新增:强持有代理对象
    private let sessionDelegate = PhoneWCSessionDelegate()
    
    private init() {
        print("*** WatchAppDefaults.sharedInstance initialized ***")
    }
    
    func configure() {
        print("*** Configuring watch defaults settings ***")
        // 使用持有的代理,而非临时创建
        sessionDelegate.startSession()
    }
}

手表端修改

更新WatchAppDefaults.swift

同样添加属性持有代理实例:

import Foundation
import WatchConnectivity

class WatchAppDefaults {
    static var sharedInstance = WatchAppDefaults()
    // 新增:强持有代理对象
    private let sessionDelegate = WatchWCSessionDelegate()
    
    private init() {
        print("*** WatchAppDefaults.sharedInstance initialized ***")
    }
    
    func configure() {
        print("*** Configuring watch defaults settings ***")
        // 使用持有的代理,而非临时创建
        sessionDelegate.startSession()
    }
}

额外注意事项

  1. 手表端代理方法完整性:watchOS的WCSessionDelegate需要实现全部必需的代理方法,需在WatchWCSessionDelegate中补充以下两个方法:
func sessionDidBecomeInactive(_ session: WCSession) {
    print("*** WCSession became inactive on watch ***")
}

func sessionDidDeactivate(_ session: WCSession) {
    print("*** WCSession deactivated on watch ***")
    // 如需重新激活会话,可在此调用 session.activate()
}
  1. 初始化时机:当前在ContentView.onAppear中触发配置是可行的,若想更早初始化,也可将配置逻辑放在App结构体的初始化方法中。

内容的提问来源于stack exchange,提问作者AdrianGutierrez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 18:54:57