gpt4 book ai didi

ios - watch 应用程序终止时 WatchConnectivity transferUserInfo 不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:04:20 25 4
gpt4 key购买 nike

我看了文档,transferUserInfo是一个队列为1的进程,最新的数据一定会到达watch沙箱。

这是 iOS 应用程序上的代码:

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

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

如果 iOS 应用和 watch 应用都处于事件状态,则此方法一直有效。

但是当我关闭 watch 应用程序,然后从 iOS 应用程序再次调用此方法,等待几秒钟然后再次打开 watch 应用程序时, watch 委托(delegate) didReceiveUserInfo: 没有被触发全部。

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

最佳答案

As I read the doc, transferUserInfo is a queued process of 1,

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

您所描述的是 updateApplicationContext。只能将一个上下文排队,并且最新的上下文会替换之前收到的任何上下文。

and the latest data will surely reach the watch sandbox.

不,传输只有在 session 处于事件状态时才会完成。如果 session 处于非事件状态,传输将失败并出现错误。

这就是为什么在 watch 端没有调用委托(delegate),因为您的 watch 应用没有收到任何数据。 发送之前,手机端的传输失败,实际上什么也没有传输到 watch 。

如何解决问题:

  • 检查 activationState 传输任何数据之前。仅在 session 处于事件状态时尝试传输数据。

    Check the value of this property before attempting to transfer data or files using the methods of this object. When the value is WCSessionActivationStateActivated you may initiate the transfer of data and files normally. If it is any other value, do not initiate any transfers.

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

    The session object calls this method when a data transfer initiated by the current app finished, either successfully or unsuccessfully. Use this method to note that the transfer completed or to respond to errors, perhaps by trying to send the data again at a later time.

关于ios - watch 应用程序终止时 WatchConnectivity transferUserInfo 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39030784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com