当WatchKit应用程序未运行时,从iOS应用程序设置WatchKit应用程序的值

时间:2016-08-19 08:17:43

标签: ios apple-watch watch-os watchconnectivity apple-watch-complication

我已经知道如何使用WCSession的updateApplicationContext方法,但它仅在我的WatchKit应用程序运行时才有效。

我需要将货币汇率从iOS应用转移到手表,以更新我的手表数据和复杂功能。

我有一个API来获取USD-CNY和USD-EUR的汇率,并希望与手表分享(类似于NSUserDefaults持续数据的方式),因此它可以显示“1 USD”在我的并发症中= 6.3 CNY“。

那么,我该如何实现呢?

1 个答案:

答案 0 :(得分:1)

对于watchOS 2

只有一种WCSession方法可让您在监视应用未处于活动状态时更新并发症数据。

假设您的并发症处于有效状态且未超过the (iOS 10) number of transfers per daytransferCurrentComplicationUserInfo会在后台唤醒您的观看分机,并立即将用户信息转移到您的扩展程序。

然后,您的扩展程序可以将该数据保留在监视器上(供监视应用程序在活动时使用),更新并发症之前。

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

watchOS 3支持后台刷新应用程序任务。这意味着您的手表应用程序现在可以在后台更新自身,停靠快照及其复杂功能。

我已经covered this information in an existing answer了,但总结了这里的关键点:

  

Apple建议您使用每个机会,无论您的应用是在前台还是后台,都可以使您的并发症,应用和停靠快照保持最新状态。

这是一个彻底的改变,仅仅是在应用程序未激活时更新复杂功能,再到现在更新所有内容 - 复杂功能,应用程序和停靠快照 - 无论,您的手表应用程序是在前台还是在后台。

关于更新频繁更改数据的限制的说明

无论您使用哪种方法,请记住,您每天或每小时可以执行的更新次数为limited

正如Apple建议的那样,您应该考虑在需要时安排汇率更新。这两个会议涵盖更新手表应用的时间(以及如何):