首页 文章

观看OS应用程序无法连接iOS应用程序

提问于
浏览
3

我正在尝试将我的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 回答

  • 1

    activate() 方法从Watch OS v2.2开始运行asynchronously . 因此,在您的代码中,在调用 activate() 之后调用 updateApplicationContext 并不能保证在尝试更新应用程序上下文时实际激活会话 .

    正确的流程是将您的消息移至 session(_:activationDidCompleteWith:error:) ,例如:

    func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
        if activationState == .activated {
           // Update application context here
        }
    }
    

相关问题