WatchConnectivity - transerUserInfo отправляет, но не получает данные - PullRequest
0 голосов
/ 14 марта 2019

Я делал приложение, которое использует 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 и они работают по отдельности.Буду признателен за отзывы и советы о том, как решить эту проблему.Ура!

...