我正在尝试将我的 Watch OS 应用程序与 iOS 应用程序连接并获取一些数据,但当我尝试与 iOS 应用程序连接时出现以下错误:
[WC] __28-[WCSession activateSession]_block_invoke_2 sessionReadyForInitialStateWithCompletionHandler 由于 NSXPCConnectionInterrupted 失败
__44-[WCSession updateApplicationContext:error:]_block_invoke 由于 WCErrorCodeSessionNotActivated 失败
WatchConnectivity 会话尚未激活。
iOS应用程序代码:
- (void) startSession{
if ([WCSession isSupported]) {
self.session = [WCSession defaultSession];
self.session.delegate = self;
[self.session activateSession];
}
}
观看操作系统代码:
func startSession() {
if(session.activationState != .activated){
session.delegate = self
session.activate()
}
}
public func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?){
print("activationDidCompleteWith")
if activationState == WCSessionActivationState.activated {
NSLog("Activated")
if(WCSession.default().isReachable){
do {
try session.updateApplicationContext(
[WatchRequestKey : "updateData"]
)
}
catch let error as NSError {
print("\(error.localizedDescription)")
}
}
}
if activationState == WCSessionActivationState.inactive {
NSLog("Inactive")
}
if activationState == WCSessionActivationState.notActivated {
NSLog("NotActivated")
}
}
iOS 应用程序位于 Objective C 中,手表应用程序位于 swift 中
我首先执行我的 iOS 应用程序代码,它的委托方法运行,但是当我运行 watch os 应用程序时,它无法执行任何委托方法,并产生上述错误。
The activate()
方法运行异步地 https://developer.apple.com/reference/watchconnectivity/wcsession/1615655-activate从 Watch OS v2.2 开始。所以,在你的代码中,调用updateApplicationContext
就在调用之后activate()
不提供任何保证在尝试更新应用程序上下文时会话将被实际激活。
正确的流程是将您的消息移至session(_:activationDidCompleteWith:error:)
,例如:
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
if activationState == .activated {
// Update application context here
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)