WCErrorCodeDeliveryFailed: не удалось доставить полезную нагрузку
Я работаю над приложением, которое обменивается данными между iPhone и Apple Watch, используя WCSession
метод sendMessage:replyHandler:errorHandler:
После реализации этого метода я получаю сообщение об ошибке:
WCSession _onqueue_notifyOfMessageError: withErrorHandler: errorHandler: ДА с 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)")
})
}
}
}
....
Любая помощь приветствуется.
2 ответа
- У тебя есть
session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void)
на WCSessionDelegate стороны IOS? - Ты звонишь
replyHandler()
внутри этого метода?
Обратите внимание, что session(_ session: WCSession, didReceiveMessage message: [String : Any])
будет вызываться только для сообщений, отправленных без replyHandler.
Я был в той же беде. Если вы отправляете сообщение с replyHandler, вам придется использовать
func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) {
}
вместо
func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
}
для получения сообщений.