2017-01-27 31 views
3

我想我的收藏OS应用与iOS应用连接,并获取了一些数据,但我收到以下错误,当我尝试使用iOS应用连接连接:观看OS应用程序无法与iOS应用

[WC] __28-[WCSession activateSession]_block_invoke_2 sessionReadyForInitialStateWithCompletionHandler failed due to NSXPCConnectionInterrupted

__44-[WCSession updateApplicationContext:error:]_block_invoke failed due to WCErrorCodeSessionNotActivated WatchConnectivity session has not been activated.

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应用程序代码,第一,它的委托方法运行,但是当我运行手表OS的应用程序也无法执行任何委托方法,并产生上述错误。

+0

任何更新对此有何看法?我与watchOS 2和iOS应用程序有同样的问题。 – LucioB

回答

0

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 
    } 
} 
+0

我现在在委托方法中使用它,但它没有被调用,我不断得到上面给出的错误。会话不会在Watch OS应用程序中激活,尽管它在iPhone应用程序中被激活。 – pankaj

+0

我已编辑我的代码 – pankaj

+0

@ pankaj您在哪里调用Watch上的startSession()? – spassas