观看电话通讯-didReceiveApplicationContext未触发

时间:2018-10-12 05:37:56

标签: swift apple-watch watch-os watchconnectivity watchos-simulator

AppleWatch和iPhone之间的通讯出现问题。

  • iPhone to Watch通讯正常。

  • 观看iPhone:AppDelegate中的True https://www.google.com/ True http://www.google.com/ True http://www.google.com/ True http://google.com/ False 不会触发!!!

-

我在(iPhone)AppDelegate中拥有这个:

didReceiveApplicationContext

-

import WatchConnectivity

...

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

在手表InterfaceController中,我有:

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") } } 方法不能在AppDelegate中启动?

-

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

1 个答案:

答案 0 :(得分:1)

当我终于找到解决方案时(经过大量的反复试验和搜索之后),可以将其作为重复项关闭。

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

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

WCErrorCodeDeliveryFailed: Payload could not be delivered

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