【问题标题】:WCErrorCodeDeliveryFailed: Payload could not be deliveredWCErrorCodeDeliveryFailed:无法交付有效负载
【发布时间】:2017-06-28 08:02:21
【问题描述】:

我正在开发一个在 iPhone 和 Apple Watch 之间共享数据的应用程序,使用 WCSession 方法 sendMessage:replyHandler:errorHandler:

实施该方法后,我收到如下错误:

WCSession _onqueue_notifyOfMessageError:withErrorHandler: errorHandler: YES with WCErrorCodeDeliveryFailed。

错误 = 无法交付有效负载。

import Foundation
import WatchKit
import WatchConnectivity

class ResultInterfaceController: WKInterfaceController, WCSessionDelegate {

override func awake(withContext context: Any?) {
    super.awake(withContext: context)

    let applicationData = ["name": "ViratKohli"]
    self.sendToPhone(data: applicationData)
}

func sendToPhone(data: [String: Any]) {

    if WCSession.isSupported() {

        let session = WCSession.default
        session().delegate = self
        session().activate()

        if WCSession.default().isReachable {

            session().sendMessage(data, replyHandler: {(_ replyMessage: [String: Any]) -> Void in

                print("ReplyHandler called = \(replyMessage)")
                WKInterfaceDevice.current().play(WKHapticType.notification)
            }, 
            errorHandler: {(_ error: Error) -> Void in

                print("Error = \(error.localizedDescription)")
            })
         }
    }
}
....

任何帮助表示赞赏。

【问题讨论】:

  • 也许this 对你有帮助?
  • @ReinhardMänner 不。那没有

标签: ios swift watchos-3 watchconnectivity wcsession


【解决方案1】:

我也遇到了同样的麻烦。如果您使用 replyHandler 发送消息,则必须使用

func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) {

}

而不是

func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {

}

用于接收消息。

【讨论】:

    【解决方案2】:
    1. 你在 ios 端的 WCSessionDelegate 上有session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) 吗?
    2. 您是否在此方法中调用replyHandler()

    注意session(_ session: WCSession, didReceiveMessage message: [String : Any])只会在没有replyHandler的消息被调用。

    【讨论】:

    • 这是正确答案。如果提供了replyHandler,但其他应用没有实现replyHandler 的变体,则请求将失败。
    • 谢谢,在我阅读这篇文章/答案并尝试session:message:replyHandler: + 呼叫replyHandler() 路线之前,一直在努力使用手表 > 电话沟通!
    • 谢谢!效果很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2016-12-27
    • 1970-01-01
    • 2020-09-18
    相关资源
    最近更新 更多