问题
I'm working on an app that share data between iPhone and Apple Watch, using WCSession
method sendMessage:replyHandler:errorHandler:
After implementing that method I get the error like:
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)")
})
}
}
}
....
Any help appreciated.
回答1:
- Do you have
session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void)
on ios side's WCSessionDelegate? - Are you calling
replyHandler()
inside this method?
Pay attention that session(_ session: WCSession, didReceiveMessage message: [String : Any])
will be called only for messages sent without replyHandler.
回答2:
I was in the same trouble. If you are sending a message with a replyHandler , you'll have to use
func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) {
}
instead of
func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
}
for receiving messages.
来源:https://stackoverflow.com/questions/42151477/wcerrorcodedeliveryfailed-payload-could-not-be-delivered