我遇到一个问题,当通过WCConnection发送消息时,如果在委托方法session.sendMessage
中调用activationDidCompleteWith
有时会失败。这个问题并非每次都能重现(实际上,它在大多数时间都有效)。
但是通过在我的UI中使用按钮强制session.sendMessage
(调用相同的加载代码)会立即成功进行会话通信,因此我知道问题不在会话本身或主应用程序中。
假设会话已准备好接受activationDidCompleteWith
中的通信是否不安全?有没有更好的地方打电话给我的初次交流?
答案 0 :(得分:1)
根据我的经验,手表操作系统相当复杂,尤其是在使用旧型号手表时。话虽如此,我认为问题的答案是:“假设会话准备好接受ActivationDidCompleteWith中的通信是否不安全?”是的,假设是不安全的。
在我自己的应用中,我遇到的情况与您的情况非常相似,我通过发送一条消息直到收到响应来解决该问题。
// false until a response is received from the phone
let receivedResponse: Bool = false
// function that sends the message
func requestResponse() {
guard WCSession.default.isReachable else {
print("Phone not reachable")
return
}
// callback that handles response
let responseHandler: ([String: Any]) -> () = { response in
receivedResponse = true
callback(response)
}
WCSession.default.sendMessage(["Request": "Response"],
replyHandler: responseHandler) { error in
print(error.localizedDescription)
}
}
// timer that calls the request function repeatedly
let retryTimer = Timer.scheduledTimer(withTimeInterval: 1,
repeats: true) { timer in
if receivedResponse {
// we know we got a response so clean up timer
timer.invalidate()
}
requestResponse()
}