使用带有WatchOS2的NSURLSession后台任务

时间:2016-01-12 15:25:33

标签: ios objective-c swift watchkit apple-watch-complication

想知道我们如何在watchOS 2中使用NSURLSession后台任务。

我想在出现并发症时产生背景下载。我不清楚的是我会找到application:handleEventsForBackgroundURLSession

WatchKit扩展程序的哪个部分会被唤醒,我将在哪里获得此回调?这部分在文档中不是很清楚。

1 个答案:

答案 0 :(得分:2)

  

我想在出现并发症时产生背景下载。

如果您希望在并发症控制器中异步获取数据,则会发现it is unreliable, as well as discouraged

为避免不必要地耗尽您的并发症的执行时间预算,您可能需要考虑让手机处理后台获取,然后使用WCSession实例transferCurrentComplicationUserInfo。这将发送一条高优先级消息,该消息将唤醒您的分机以传送数据。

此时,您要么:

  • 等待复杂控制器的预定更新发生,或

  • 通过致电reloadTimelineForComplicationextendTimelineForComplication手动发信号通知ClockKit更新您的并发症。

您可以在更新并发症数据下的watchOS 2 Transition Guide中找到具体的详细信息。

更新数据的不同方法:

  • 通过扩展程序进行显式手动更新

      

    当你有复杂的新数据时,必须使用CLKComplicationServer对象的reloadTimelineForComplication:或extendTimelineForComplication:方法向ClockKit发信号通知你的并发症已准备好更新。 ...调用这些方法会导致ClockKit创建数据源对象并从中请求新数据。

  • 通过并发控制器requestedUpdateDidBegin

    计划自动更新(使用缓存数据)
      

    预定更新对于数据在可预测时间发生变化的应用非常有用。当发生预定更新时,ClockKit首先调用数据源的requestedUpdateDidBegin或requestedUpdateBudgetExhausted方法。使用这些方法确定您是否有新数据可用。

  • 通过WKExtensionDelegate didReceiveRemoteNotification

  • 推送通知
  • 通过WCSession transferCurrentComplicationUserInfo

    手动更新
      

    当您的iOS应用收到针对您的复杂功能的更新数据时,它可以使用Watch Connectivity框架立即更新您的复杂功能。 WCSession的transferCurrentComplicationUserInfo:方法向WatchKit扩展发送高优先级消息,根据需要将其唤醒以传递数据。收到数据后,根据需要延长或重新加载时间线,以强制ClockKit从您的数据源请求新数据。

无论哪种方式,并发症控制器应该只使用可用的新数据,而不是尝试(异步)获取它需要的任何数据。