监视应用程序终止时,WatchConnectivity transferUserInfo无法正常工作

时间:2016-08-19 03:45:34

标签: ios watchkit watch-os-2 watchconnectivity wcsession

当我阅读文档时,transferUserInfo是一个排队过程1,最新数据肯定会到达手表沙箱。

这是iOS应用上的代码:

-(void)sendViaTransferUserInfo {
    NSDictionary *weatherData = [[NSDictionary alloc] initWithObjectsAndKeys:
                                     self.cityName, @"City",
                                     self.tempCelciusStr, @"Temp",
                                     nil];

    WCSession *session = [WCSession defaultSession];
    [session transferUserInfo:weatherData]; 
}

如果iOS应用和手表应用都处于活动状态,则此功能始终有效。

但是当我关闭手表应用程序时,再次从iOS应用程序调用此方法,等待几秒钟然后再次打开手表应用程序,手表代理didReceiveUserInfo:根本没有被触发。

我是否正确理解transferUserInfo:用法?任何人都可以解释为什么没有在手表应用程序上调用代表?

1 个答案:

答案 0 :(得分:1)

  

在我阅读文档时,transferUserInfo是1的排队过程,

不可以,它可以对多个用户信息传输进行排队,并且每个都将按照传递的顺序接收。

您所描述的是updateApplicationContext。只有一个上下文可以排队,最近的上下文将替换之前收到的任何上下文。

  

并且最新数据肯定会到达手表沙箱。

不,只有会话处于活动状态时才会完成转移。如果会话处于非活动状态,传输将失败并显示错误。

这就是为什么代表没有在手表方面被调用,因为您的手表应用程序没有收到任何数据。 发送前电话端的传输失败,实际上没有传输到手表。

如何解决问题:

  • 传输任何数据之前检查activationState 。仅在会话处于活动状态时尝试传输数据。

      

    在尝试使用此对象的方法传输数据或文件之前,请检查此属性的值。当值为WCSessionActivationStateActivated时,您可以正常启动数据和文件的传输。如果是任何其他值,请不要启动任何转移。

  • 使用session(_:didFinishUserInfoTransfer:error:)确定传输是否成功。

      

    会话对象在当前应用程序启动的数据传输成功或成功完成时调用此方法。使用此方法可以指出传输已完成或响应错误,可能是稍后再次尝试发送数据。