我正在尝试将我的Watch OS应用程序与iOS应用程序连接并获取一些数据,但是当我尝试连接iOS应用程序时出现以下错误:
[WC] __28- [WCSession activateSession] _block_invoke_2 sessionReadyForInitialStateWithCompletionHandler因NSXPCConnectionInterrupted而失败
由于WCErrorCodeSessionNotActivated,__ 44- [WCSession updateApplicationContext:error:] _ block_invoke失败 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应用程序处于客观C状态,手表应用程序处于快速
状态我首先执行我的iOS应用程序代码并运行委托方法,但是当我运行watch os app时,它无法执行任何委托方法,并产生上述错误。
答案 0 :(得分:1)
activate()
方法从Watch OS v2.2开始运行asynchronously。因此,在您的代码中,在调用updateApplicationContext
之后调用activate()
并不能保证在尝试更新应用程序上下文时实际激活会话。
正确的流程是将您的邮件移至session(_:activationDidCompleteWith:error:)
,例如:
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
if activationState == .activated {
// Update application context here
}
}