我在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:
用于手表>手机