监视电话通信 - didReceiveApplicationContext 未触发



我在AppleWatch和iPhone之间遇到沟通问题。

  • iPhone到手表通信工作正常。

  • 观看到 iPhone:AppDelegate 中的didReceiveApplicationContext不会触发!!

-

我在(iPhone(AppDelegate中有这个:

import WatchConnectivity

-

if WCSession.isSupported() {
WCSession.default.delegate = self
WCSession.default.activate()
}

extension AppDelegate: WCSessionDelegate {
// MARK: WCSessionDelegate
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
//
}
func sessionDidBecomeInactive(_ session: WCSession) {
//
}
func sessionDidDeactivate(_ session: WCSession) {
//
}
func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String: Any]) {
DispatchQueue.main.async {
print("Phone didReceiveApplicationContext")
}
}
} 

在手表接口控制器中,我有:

import WatchConnectivity

-

if WCSession.isSupported() {
WCSession.default.delegate = self
WCSession.default.activate()
}

-

extension InterfaceController: WCSessionDelegate {
// MARK: WCSessionDelegate
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
//
}
func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String: Any]) {
DispatchQueue.main.async {
print("Watch didReceiveApplicationContext")
}
}
}

-

我正在尝试通过"更新应用程序上下文"进行沟通,如下所示:

@IBAction func buttonPressed() {
guard WCSession.isSupported() else {
return
}
let message = ["buttonPressed" : true]
do {
try WCSession.default.updateApplicationContext(message)
} catch {
print("Something went wrong")
}
}

-

为什么didReceiveApplicationContext方法不在应用程序委托中触发?

-

我发现调试手表应用程序非常复杂,包括将调试器附加到 iPhone 应用程序等的必要性......也许我的调试方式存在根本性错误?

这可以作为副本关闭,因为我终于找到了解决方案(经过大量的反复试验和搜索(。

我不确定我/WCSession.default.updateApplicationContext的问题是什么,但以下 SO 帖子解释说您可以使用sendMessage尽管您必须小心replyHandler

如果使用sendMessage:replyHandler:errorHandler:从监视发送消息,则只有相应的委托方法 (session:message:replyHandler:( 将在手机上的 AppDelegate 中触发。而且,您必须致电replyHandler!!!

WCErrorCodeDelivery失败:无法传递有效负载

因此,我将updateApplicationContext用于电话>手表,sendMessage:replyHandler:errorHandler:用于手表>手机

相关内容

  • 没有找到相关文章

最新更新