gpt4 book ai didi

ios - 有时无法访问配对 watch 模拟器上的 WatchConnectivity session

转载 作者:行者123 更新时间:2023-12-01 16:22:12 27 4
gpt4 key购买 nike

我有一个 iOS 应用程序,它使用 WatchConnectivity 与配对的 watch 进行通信。在大多数情况下,它可以在模拟器和设备上正常运行。

问题:

在模拟器上的开发过程中,当我尝试使用 WCSession.default.sendMessage(_:replyHandler:errorHandler:) 从 iOS 向 watchOS 发送直接消息时,我不时遇到以下通信错误。 :

Error Domain=WCErrorDomain Code=7007  
"WatchConnectivity session on paired device is not reachable."

我已阅读 this相关帖子,但它不适用于我的情况,因为我的应用程序正常工作。

我的问题:

当应用程序在 iOS 模拟器上运行时, watch 模拟器怎么会变得无法访问?
重试是否有意义 sendMessage过了一会儿?
有什么解决方法吗?

最佳答案

作为解决方法,我修改了 sendMessage函数,以便在发生此错误时重试传输多次。从此,所有sendMessage传输成功执行。

func sendMessage(_ message: [String: AnyObject],
replyHandler: (([String: Any]) -> Void)?,
errorHandler: ((Error) -> Void)?) {
guard let communicationReadySession = communicationReadySession else {
// watchOS: A session is always valid, so it will never come here.
print("Cannot send direct message: No reachable session")
let error = NSError.init(domain: kErrorDomainWatch,
code: kErrorCodeNoValidAndReachableSession,
userInfo: nil)
errorHandler?(error)
return
}

/* The following trySendingMessageToWatch sometimews fails with
Error Domain=WCErrorDomain Code=7007 "WatchConnectivity session on paired device is not reachable."
In this case, the transfer is retried a number of times.
*/
let maxNrRetries = 5
var availableRetries = maxNrRetries

func trySendingMessageToWatch(_ message: [String: AnyObject]) {
communicationReadySession.sendMessage(message,
replyHandler: replyHandler,
errorHandler: { error in
print("sending message to watch failed: error: \(error)")
let nsError = error as NSError
if nsError.domain == "WCErrorDomain" && nsError.code == 7007 && availableRetries > 0 {
availableRetries = availableRetries - 1
let randomDelay = Double.random(min: 0.3, max: 1.0)
DispatchQueue.main.asyncAfter(deadline: .now() + randomDelay, execute: {
trySendingMessageToWatch(message)
})
} else {
errorHandler?(error)
}
})
} // trySendingMessageToWatch

trySendingMessageToWatch(message)
} // sendMessage

关于ios - 有时无法访问配对 watch 模拟器上的 WatchConnectivity session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53984355/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com