使用Swift 3和后台任务更新复杂性

时间:2016-06-22 07:59:31

标签: swift swift3 apple-watch-complication watch-os-3 wkrefreshbackgroundtask

对于watchOS 3,Apple建议使用WKRefreshBackgroundTask更新复杂功能,而不是使用getNextRequestedUpdateDate

如何使用新方法确定两次更新之间的时间?

我只会将我的数据请求(从网址)发送到getCurrentTimelineEntry并更新复杂功能,但我认为这不是Apple推荐的。

一个简短的代码示例将是一个很大的帮助。

1 个答案:

答案 0 :(得分:9)

我通常会介绍此in a different answer,但我会在此处解答您的具体问题。

你是对的,你不应该破解复杂控制器进行任何(异步)提取。数据源负责根据并发服务器的要求返回现有数据。这对于watchOS 2来说是正确的,并且在watchOS 3中仍然如此。

对于watchOS 3,每次后台刷新都可以安排下一次。

流程概述:

在您的特定情况下,您可以等到WKURLSessionRefreshBackgroundTask任务完成下载。此时,在完成现有后台任务之前安排下一次后台刷新

在将来的某个时间,您的分机将再次被唤醒以重新开始整个后台流程:

  • 从您的网络服务中请求新数据
  • 处理回复并更新您的数据存储
  • 告诉并发症自我更新(将使用手头的新数据)。
  • 更新停靠栏快照
  • 安排即将进行的后台刷新任务
  • 将您当前的任务标记为完成。

您甚至可以链接一系列不同的后台子任务,其中每个子任务处理刷新周期的单独方面,并负责安排以下子任务。

示例代码:

如果您还没有看到它,Apple会提供其WatchBackgroundRefresh示例代码来演示部分内容。你可以使用

WKExtension.shared().scheduleBackgroundRefresh(withPreferredDate:userInfo:)

在当前任务完成之前安排(初始或)未来任务。

虽然他们的示例使用刷新按钮来安排下一次后台刷新,但概念是相同的,无论是用户操作还是后台任务来安排下一个请求。)