Имам съществуващо приложение за 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