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

时间:2017-01-27 14:55:56

标签: ios objective-c swift watchkit

我正在尝试将我的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时,它无法执行任何委托方法,并产生上述错误。

1 个答案:

答案 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
    }
}