Смотреть на телефонную связь - сделал, получил приложение, контекст не стрелял
У меня проблемы с обменом данными между AppleWatch и iPhone.
Связь между iPhone и Watch работает нормально.
Смотреть на iPhone:
didReceiveApplicationContext
в AppDelegate не срабатывает!!!
-
У меня есть это в (iPhone) AppDelegate:
import WatchConnectivity
-
if WCSession.isSupported() {
WCSession.default.delegate = self
WCSession.default.activate()
}
...
extension AppDelegate: WCSessionDelegate {
// MARK: WCSessionDelegate
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
//
}
func sessionDidBecomeInactive(_ session: WCSession) {
//
}
func sessionDidDeactivate(_ session: WCSession) {
//
}
func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String: Any]) {
DispatchQueue.main.async {
print("Phone didReceiveApplicationContext")
}
}
}
В часах InterfaceController у меня есть:
import WatchConnectivity
-
if WCSession.isSupported() {
WCSession.default.delegate = self
WCSession.default.activate()
}
-
extension InterfaceController: WCSessionDelegate {
// MARK: WCSessionDelegate
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
//
}
func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String: Any]) {
DispatchQueue.main.async {
print("Watch didReceiveApplicationContext")
}
}
}
-
Я пытаюсь общаться, "обновляя контекст приложения", вот так:
@IBAction func buttonPressed() {
guard WCSession.isSupported() else {
return
}
let message = ["buttonPressed" : true]
do {
try WCSession.default.updateApplicationContext(message)
} catch {
print("Something went wrong")
}
}
-
Почему не didReceiveApplicationContext
метод огня в AppDelegate?
-
Я нахожу, что отладка приложений Watch довольно сложна, включая необходимость подключения отладчика к приложению iPhone и т. Д.... возможно, что-то не так с тем, как я отлаживаю?
1 ответ
Это может быть закрыто как дубликат, так как я наконец нашел решение (после большого количества проб и ошибок и поиска).
Я не уверен, с чем связана моя проблема WCSession.default.updateApplicationContext
, но следующий пост объясняет, что вы можете использовать sendMessage
хотя вы должны быть осторожны во всем replyHandler
,
Если вы отправляете сообщение с часов, используя sendMessage:replyHandler:errorHandler:
, тогда только тот соответствующий метод делегата (session:message:replyHandler:
) будет срабатывать в AppDelegate на телефоне. И вы ДОЛЖНЫ позвонить replyHandler
!!!
WCErrorCodeDeliveryFailed: не удалось доставить полезную нагрузку
Итак, я использую updateApplicationContext
для телефона> смотреть, и sendMessage:replyHandler:errorHandler:
для часов> Телефон