【问题标题】:Updating complication with Swift 3 and background task使用 Swift 3 和后台任务更新复杂性
【发布时间】:2016-10-24 00:51:52
【问题描述】:

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

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

我只会将我的数据请求(来自 url)破解到 getCurrentTimelineEntry 并更新复杂性,但我认为这并不是 Apple 真正推荐的。

一个简短的代码示例会很有帮助。

【问题讨论】:

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


    【解决方案1】:

    我通常介绍了这个in a different answer,但我会在这里解决您的具体问题。

    您是对的,您不应该破解复杂控制器来执行任何(异步)获取。数据源应该负责返回手头上的现有数据,如复杂服务器的要求。 watchOS 2 是这样,在 watchOS 3 中仍然如此。

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

    流程概览:

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

    到那时,您的扩展程序将再次被唤醒以再次启动整个后台进程:

    • 从您的网络服务请求新数据
    • 处理回复并更新您的数据存储
    • 告诉复杂功能进行自我更新(它将使用手头的新数据)。
    • 更新扩展坞快照
    • 安排即将进行的后台刷新任务
    • 将您当前的任务标记为已完成。

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

    示例代码:

    如果您还没有看过它,Apple 提供了它的WatchBackgroundRefresh 示例代码来演示其中的一部分。你可以使用

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

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

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

    【讨论】:

    • 我已经尝试过那个演示,但它似乎不起作用。开始的任务永远不会完成。
    • 究竟是什么不适合你?请具体。同样,您应该编辑您的问题,显示您正在尝试的代码,并描述您遇到的确切问题。没有实际编码问题的问题更难回答。
    • 你已经回答了我的问题。我剩下的问题是苹果的演示不起作用。正如我已经写的那样,问题是任务开始但从未完成。
    • 在我这边,后台任务启动,didFinish 处理程序触发,所以一切看起来都正常,尽管有时有点不一致。测试版软件有问题。在这方面真的帮不上忙。您可以提交错误报告,继续移植您的代码以使用新功能,并希望它在 beta 2 中得到改进!
    • 仍然无法在 GM 中运行,演示项目链接现在是 404。太疯狂了。
    猜你喜欢
    • 1970-01-01
    • 2015-04-14
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多