WatchConnectivity — использование sendMessage

Я пытаюсь установить связь между Apple Watch (версия 2.0.1) и моим iPhone (под управлением iOS 9.1) с помощью API WatchConnectivity в Swift.

Я следил за этим руководством. и не смог обеспечить обмен сообщениями между устройствами.

Сообщения от Apple Watch:

    let applicationData = ["data":sampleData]

    self.wcSession.sendMessage(applicationData, replyHandler: {(_: [String : AnyObject]) -> Void in
        // handle reply from iPhone app here
        }, errorHandler: {(error ) -> Void in
            // catch any errors here
    })

В моем ViewController.swift:

// MARK: - WatchConnectivity Session
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {

    let sample:HKQuantitySample = (message["data"] as? HKQuantitySample)!
    print("Sample messaged: \(sample)")
}

func sessionReachabilityDidChange(session: WCSession) {
    print("session reachability changed: \(session.reachable)")
}

И приложение Watch, и приложение iOS находятся на переднем плане!! Я не уверен, чего не хватает.


person Mj.B    schedule 02.12.2015    source источник
comment
Что содержит sampleData? Вызывается ли обработчик ошибок с ошибкой, если да, то с какой ошибкой?   -  person ccjensen    schedule 03.12.2015
comment
Образец данных содержит HKSamples данных о частоте сердечных сокращений. Я не получаю никаких ошибок. Кроме того, didReceiveMessage также не вызывается.   -  person Mj.B    schedule 03.12.2015


Ответы (1)


Все API-интерфейсы WCSession, которые принимают словарь в качестве параметра, принимают словари только типы списка свойств; это включает в себя sendMessage API, который вы используете:

сообщение / Словарь значений списка свойств, которые вы хотите отправить. Вы определяете содержимое словаря, который поддерживает ваш коллега. Этот параметр не должен быть равен нулю.

Таким образом, HKSamples не является типом списка свойств Вот почему это не работает, хотя вы говорите, что обработчик ошибок не вызывается, что звучит очень подозрительно. Вы уверены, что изменение кода на это ничего не регистрирует?

self.wcSession.sendMessage(applicationData, replyHandler: {(_: [String : AnyObject]) -> Void in
    // handle reply from iPhone app here
    }, errorHandler: {(error ) -> Void in
        print(error);
})
person ccjensen    schedule 03.12.2015