我正在尝试将我的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];
}
}
观看OS代码:
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应用程序是客观的C和观看应用程序是迅速的
我首先执行我的iOS应用程序代码并运行委托方法,但是当我运行watch os app时,它无法执行任何委托方法,并产生上述错误 .
1 回答
activate()
方法从Watch OS v2.2开始运行asynchronously . 因此,在您的代码中,在调用activate()
之后调用updateApplicationContext
并不能保证在尝试更新应用程序上下文时实际激活会话 .正确的流程是将您的消息移至
session(_:activationDidCompleteWith:error:)
,例如: