У меня есть существующее приложение iOS 9.2 и watchOS 2.1, которое использует sendMessage
и transferUserInfo
для отправки данных с iPhone на Apple Watch. Если sendMessage
терпит неудачу, я использую transferUserInfo
для постановки данных в очередь для последующей доставки:
// *** In the iOS app ***
self.session.sendMessage(message, replyHandler: nil) { (error) -> Void in
// If the message failed to send, queue it up for future transfer
self.session.transferUserInfo(message)
}
// *** In the watchOS app ***
func session(session: WCSession, didReceiveMessage message: [String : AnyObject]) {
// Handle message here
}
func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject]) {
// Handle message here
}
Без изменения какого-либо кода и запуска приложения на iOS 9.3 с watchOS 2.2 на реальном устройстве (симулятор не имеет такой проблемы), sendMessage
передает данные на Apple Watch, пока часы находятся в пределах досягаемости и экран включен. Это ожидаемо и как это работало ранее. Однако, если экран выключен и sendMessage
не работает, transferUserInfo
больше не передает данные на Apple Watch, когда экран снова включается.
В попытке выяснить, где произошла ошибка, я добавил следующий метод WCSessionDelegate
, чтобы узнать, не удалось ли приложению iOS отправить данные:
func session(session: WCSession, didFinishUserInfoTransfer userInfoTransfer: WCSessionUserInfoTransfer, error: NSError?) {
// Called when self.session.transferUserInfo completes
}
Этот метод вызывается после вызова transferUserInfo
, но ошибка не возвращается, и приложение iOS, похоже, указывает, что передача произошла успешно.
Сначала я подумал, что, возможно, время передачи данных увеличилось, но после того, как я оставил устройство в покое на сутки, данные так и не были переданы. Теперь я несколько подозреваю, что это как-то связано с новым API для нескольких часов, и, возможно, приложению iOS нужно знать конкретные часы, чтобы отправить их, хотя у меня когда-либо были сопряжены только одни часы. У кого-нибудь есть идеи, что могло измениться и как правильно использовать transferUserInfo
?
transferCurrentComplicationUserInfo:
, похоже, так и не смог успешно передать полезную нагрузку userInfo на часы. Только когда я перезагружаю часы, все снова начинает работать. - person ospr   schedule 07.04.2016