想知道我们将如何在 watchOS 2 中使用 NSURLSession 后台任务。
我想在并发症醒来时生成后台下载。我不清楚的是我会在哪里找到application:handleEventsForBackgroundURLSession
。
WatchKit 扩展的哪一部分会被唤醒,我在哪里可以得到这个回调?这部分在文档中不是很清楚。
想知道我们将如何在 watchOS 2 中使用 NSURLSession 后台任务。
我想在并发症醒来时生成后台下载。我不清楚的是我会在哪里找到application:handleEventsForBackgroundURLSession
。
WatchKit 扩展的哪一部分会被唤醒,我在哪里可以得到这个回调?这部分在文档中不是很清楚。
我想在并发症醒来时生成后台下载。
如果您希望在复杂控制器中异步获取数据,您会发现它不可靠,并且不鼓励。
为避免不必要地耗尽复杂程序的执行时间预算,您可能需要考虑让手机处理后台提取,然后使用WCSession
实例来transferCurrentComplicationUserInfo
. 这将发送一条高优先级消息,唤醒您的扩展程序以传递数据。
那时,您可以:
等待并发症控制器的计划更新发生,或
reloadTimelineForComplication
通过调用或手动向 ClockKit 发出信号以更新您的复杂功能extendTimelineForComplication
。
您可以在watchOS 2 转换指南中的更新您的复杂数据下找到具体细节。
通过扩展显式手动更新
当您的并发症有新数据时,您必须使用 CLKComplicationServer 对象的 reloadTimelineForComplication: 或 extendTimelineForComplication: 方法向 ClockKit 发出信号,告知您的并发症已准备好更新。...调用这些方法会导致 ClockKit 创建您的数据源对象并从中请求新数据。
通过复杂控制器计划自动更新(使用缓存数据)requestedUpdateDidBegin
计划更新对于数据在可预测时间发生变化的应用非常有用。当计划更新发生时,ClockKit 首先调用数据源的 requestedUpdateDidBegin 或 requestedUpdateBudgetExhausted 方法。使用这些方法来确定您是否有可用的新数据。
通过推送通知WKExtensionDelegate
didReceiveRemoteNotification
通过手动更新WCSession
transferCurrentComplicationUserInfo
当您的 iOS 应用收到针对您的复杂功能的更新数据时,它可以使用 Watch Connectivity 框架立即更新您的复杂功能。WCSession 的 transferCurrentComplicationUserInfo: 方法向您的 WatchKit 扩展发送高优先级消息,根据需要唤醒它以传递数据。收到数据后,根据需要扩展或重新加载您的时间线,以强制 ClockKit 从您的数据源请求新数据。
无论哪种方式,并发症控制器都应该只使用它可用的新数据,而不是尝试(异步)获取它需要的任何数据。