我已经知道如何使用WCSession的updateApplicationContext
方法,但它仅在我的WatchKit应用程序运行时才有效。
我需要将货币汇率从iOS应用转移到手表,以更新我的手表数据和复杂功能。
我有一个API来获取USD-CNY和USD-EUR的汇率,并希望与手表分享(类似于NSUserDefaults
持续数据的方式),因此它可以显示“1 USD”在我的并发症中= 6.3 CNY“。
那么,我该如何实现呢?
答案 0 :(得分:1)
只有一种WCSession
方法可让您在监视应用未处于活动状态时更新并发症数据。
假设您的并发症处于有效状态且未超过the (iOS 10) number of transfers per day,transferCurrentComplicationUserInfo
会在后台唤醒您的观看分机,并立即将用户信息转移到您的扩展程序。
然后,您的扩展程序可以将该数据保留在监视器上(供监视应用程序在活动时使用),在更新并发症之前。
func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject]) {
if let ... { // Retrieve exchange rate data from dictionary
// Add code here to update your cache/backing store with exchange rate
// ...
// Now update the complication
let complicationServer = CLKComplicationServer.sharedInstance()
guard let activeComplications = complicationServer.activeComplications else { // watchOS 2.2
return
}
for complication in activeComplications {
complicationServer.reloadTimelineForComplication(complication)
}
}
}
watchOS 3支持后台刷新应用程序任务。这意味着您的手表应用程序现在可以在后台更新自身,停靠快照及其复杂功能。
我已经covered this information in an existing answer了,但总结了这里的关键点:
Apple建议您使用每个机会,无论您的应用是在前台还是后台,都可以使您的并发症,应用和停靠快照保持最新状态。
这是一个彻底的改变,仅仅是在应用程序未激活时更新复杂功能,再到现在更新所有内容 - 复杂功能,应用程序和停靠快照 - 无论,您的手表应用程序是在前台还是在后台。
无论您使用哪种方法,请记住,您每天或每小时可以执行的更新次数为limited。
正如Apple建议的那样,您应该考虑在需要时安排汇率更新。这两个会议涵盖更新手表应用的时间(以及如何):
804 Designing Great Apple Watch Experiences讨论更新观看应用的时间和原因。
218 Keeping Your Watch App Up to Date提供有关使用后台任务更新复杂功能,应用和停靠快照的详细信息。