0

我正在使用 WCSession 对象将数据从手表应用程序(watchOS 3.3 beta 4)通过sendMessage(_:replyHandler:errorHandler:). 根据Apple 的文档

在 WatchKit 扩展程序处于活动状态并运行时调用此方法会在后台唤醒相应的 iOS 应用程序并使其可访问。

但是,我发现如果对象的isReachable属性在调用之前,则消息无法发送,并出现以下错误: WCSessionfalsesendMessageError Domain=WCErrorDomain Code=7007 "WatchConnectivity session on paired device is not reachable." UserInfo={NSLocalizedDescription=WatchConnectivity session on paired device is not reachable.}

会话被激活,所以我相信这个sendMessage调用应该使 iOS 应用程序可以访问然后被发送,但这并没有发生。

在什么情况下会发生这种情况,是否有任何解决方法?

4

1 回答 1

0

a) 如果您使用sendMessage(_, replyHandler:_, errorHandler:_)非零回复处理程序,则 ios 对应方的 WCSessionDelegate 应该已session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void)实现方法,并且一旦您replyHandler(_:)在此方法中调用,消息将被称为已传递。如果没有实现这个方法,消息将不会得到响应,你会得到超时错误。

b) 另外,我注意到在session(_ session: WCSession, didXXX: XXX)WCSessionDelegate 的任何方法中的代码正在执行时,消息不会被传递。看起来它们都在一个串行后台队列中执行。

于 2017-05-28T14:42:15.653 回答