Я делал приложение, которое использует 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 && WCSession.isSupported() && 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()
}
Я протестировал другие функции для записи в файл / etc и они работают по отдельности.Буду признателен за отзывы и советы о том, как решить эту проблему.Ура!