观看操作系统应用程序无法连接到iOS应用程序

观看操作系统应用程序无法连接到iOS应用程序,ios,objective-c,swift,watchkit,Ios,Objective C,Swift,Watchkit,我正在尝试将我的Watch OS应用程序与iOS应用程序连接,并获取一些数据,但在尝试连接iOS应用程序时出现以下错误: [WC]\uuU 28-[WCSession activateSession]\u block\u invoke\u 2 sessionReadyForInitialStateWithCompletionHandler由于NSXPCConnection中断而失败 __44-[WCSession updateApplicationContext:错误:][u块\调用失败,因为W

我正在尝试将我的Watch OS应用程序与iOS应用程序连接,并获取一些数据,但在尝试连接iOS应用程序时出现以下错误:

[WC]\uuU 28-[WCSession activateSession]\u block\u invoke\u 2 sessionReadyForInitialStateWithCompletionHandler由于NSXPCConnection中断而失败

__44-[WCSession updateApplicationContext:错误:][u块\调用失败,因为WCErrorCodeSession未激活 尚未激活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中,手表应用程序在swift中

我首先执行iOS应用程序代码,它的委托方法会运行,但当我运行watch os应用程序时,它无法执行任何委托方法,并产生上述错误。

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

正确的流程是将您的消息移动到
会话(\uu:activationIDCompleteWith:error:)
,例如:

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

我现在在委托方法中使用它,但它没有被调用,我不断地得到上面给出的错误。会话在watch os应用程序中未被激活,尽管它在iPhone应用程序中被激活。@pankaj您在手表上的什么地方调用startSession()?我在我的界面的willActivate()方法中调用它?有什么更新吗?我对watchOS 2和iOS应用程序也有同样的问题。嗨,Pankaj,你能解决这个问题吗。我在iOS 13和watchOS 6上遇到了同样的错误。我的iOS应用程序可以将session.updateApplicationContext()转换为watch应用程序。但是从手表应用程序到iOS应用程序,我得到了7018错误代码。这在模拟器和物理设备中都会发生。我还清理了构建文件夹并重新启动了计算机。