#ios #swift #apple-watch #watchconnectivity
#iOS #swift #apple-watch #watchconnectivity
Вопрос:
Я создавал приложение, которое использует WatchConnectivity для переноса простой структуры с Apple Watch на iPhone, и столкнулся с некоторыми проблемами. Отправка проходит отлично, и оба устройства доступны и активированы в одном сеансе, но iPhone, похоже, никогда не получает структуру, которую я ему отправляю.
Вот мой текущий код. Я решил использовать transferUserInfo
, чтобы разрешить фоновую передачу данных.
Структура:
struct myDataList {
var xAcc: [Int]
var timestamps: [Int]
}
Просмотр (отправка):
func sendTestData(data:myDataList) {
print("sending file to iphone")
if WCSession.default.activationState == WCSessionActivationState.activated amp;amp; WCSession.isSupported() amp;amp; WCSession.default.isReachable {
WCSession.default.transferUserInfo(["Data" : data])
}
else {
print("Could not send")
}
}
iPhone (Прием):
func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) {
print("received something")
DispatchQueue.main.async {
if let data = userInfo["Data"] as? myDataList {
for (acc,time) in zip(data.xAcc,data.timestamps){
let dataLine: String = "(acc),(time)n"
self.appendToFile(file: "data", data: dataLine)
}
}
}
}
На обоих устройствах я начал сеанс следующим образом:
if WCSession.isSupported() {
WCSession.default.delegate = self
WCSession.default.activate()
}
Я протестировал другие функции для записи в file / etc, и они работают по отдельности. Я был бы признателен за отзывы и советы о том, как это решить. Приветствия!
Комментарии:
1. Вы проверили
userInfo
? Что в нем содержится?2. Я не могу проверить,
userInfo
посколькуsession
функция, похоже, даже не вызывается. Я добавил несколько строк надDispatchQueue
закрытием для печати на экране и консоли, и они не печатаются. В идеалеuserInfo
это была бы структура, из которой я пытаюсь извлечь массивы.