WCErrorCodeDeliveryFailed: 负载无法传递

19

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

实现该方法后,我遇到了以下错误:

WCSession _onqueue_notifyOfMessageError:withErrorHandler: errorHandler: YES with WCErrorCodeDeliveryFailed。

Error = Payload could not be delivered。

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)")
            })
         }
    }
}
....

感激不尽任何帮助。


也许这个链接可以帮到你? - Reinhard Männer
@ReinhardMänner 没有。那没起作用。 - Aawara
2个回答

16
  1. 你的iOS端WCSessionDelegate中是否有session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void)函数?
  2. 在该函数内部,你是否调用了replyHandler()方法?

需要注意的是,只有没有使用replyHandler发送的消息才会调用session(_ session: WCSession, didReceiveMessage message: [String : Any])函数。


这是正确的答案。如果提供了 replyHandler 但其他应用程序没有实现带有 replyHandler 的变体,则请求将失败。 - Léo Natan
谢谢,直到我读了这篇帖子/答案并尝试使用session:message:replyHandler: + 调用replyHandler()路线后,才解决了手表与手机通信的问题! - Chris Allinson
谢谢!运行得很好。 - Adam

10

我曾经也遇到过同样的问题。如果你要发送带有replyHandler的消息,你必须使用

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

}

而不是

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

}

接收消息的功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接