【发布时间】:2016-03-29 13:58:09
【问题描述】:
我有一个现有的 iOS 9.2 和 watchOS 2.1 应用程序,它使用 sendMessage 和 transferUserInfo 将数据从 iPhone 发送到 Apple Watch。如果sendMessage 失败,我将使用transferUserInfo 将数据排队以供以后传递:
// *** In the iOS app ***
self.session.sendMessage(message, replyHandler: nil) { (error) -> Void in
// If the message failed to send, queue it up for future transfer
self.session.transferUserInfo(message)
}
// *** In the watchOS app ***
func session(session: WCSession, didReceiveMessage message: [String : AnyObject]) {
// Handle message here
}
func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject]) {
// Handle message here
}
无需更改任何代码并在带有 watchOS 2.2 的 iOS 9.3 上运行应用程序(模拟器没有相同的问题),只要手表在范围内并且屏幕开启。这是预期的,它以前是如何工作的。但是,如果屏幕关闭并且sendMessage 失败,则transferUserInfo 在屏幕重新打开时不再向 Apple Watch 提供数据。
为了找出出错的地方,我添加了以下 WCSessionDelegate 方法来查看 iOS 应用程序是否未能发送数据:
func session(session: WCSession, didFinishUserInfoTransfer userInfoTransfer: WCSessionUserInfoTransfer, error: NSError?) {
// Called when self.session.transferUserInfo completes
}
在调用transferUserInfo 之后确实会调用此方法,但没有返回错误并且iOS 应用似乎指示传输成功。
起初我以为传输数据所需的时间可能增加了,但将设备单独放置一天后,数据仍然没有传输。我现在有点怀疑它与新的多手表 API 有关,也许 iOS 应用程序需要知道特定的手表才能将其发送到,尽管我只配对过一只手表。有人对可能发生的变化以及如何正确使用transferUserInfo 有任何想法吗?
【问题讨论】:
-
我们遇到了类似的问题,将用户信息从手表发送到手机,有时委托根本没有接到电话。在 9.3 和 2.2 之前,这是可行的。
-
我是那里的第二个用户评论 :) 那篇文章让我对新的多手表 API 更加怀疑。
-
我只是在玩 transferCurrentComplicationUserInfo 并注意到同样的事情。这绝对看起来像是 Apple 引入的一个新错误。
-
在我删除手机上的应用程序然后重新安装后,事情就中断了。在那之后,
transferCurrentComplicationUserInfo:似乎永远不会成功地将 userInfo 有效负载传输到手表。直到我重新启动手表,事情才重新开始工作。
标签: ios9 watchkit watchos-2 wcsession ios9.3