Apple Watch复杂网络请求

时间:2016-04-30 17:38:58

标签: watchkit watch-os-2 weather apple-watch-complication clockkit

我正在创建一个天气应用程序,可以从在线API中提取信息。

我能够在GlanceController和InterfaceController中成功获取信息。但是,我有点不确定如何为复杂化做这件事。我可以在ComplicationController类中执行网络请求吗?

如果是这样,我将如何做到这一点?

1 个答案:

答案 0 :(得分:1)

您将遇到issues related to asynchronously fetching data from within the complication data source,主要原因是在时间线更新完成后收到了数据。

Apple建议您fetch the data from a different part of your app, and have it available in advance of any complication update

  

数据源类的工作是尽快为ClockKit提供任何请求的数据。数据源方法的实现应该是最小的。不要使用数据源方法从网络获取数据,计算值或执行任何可能会延迟传输数据的操作。如果您需要获取或计算并发症的数据,请在iOS应用程序或WatchKit扩展的其他部分中进行,并将数据缓存在复杂数据源可以访问的位置。您的数据源方法应该做的唯一事情是获取缓存的数据并将其放入ClockKit所需的格式。

其他接近方式:

  • 更新复杂功能的最佳方法(一旦收到更新的天气数据,请通过手机更新)是使用transferCurrentComplicationUserInfo

  • 或者,您可以将手表应用或浏览缓存其最新的天气详细信息,以便进行下一次预定更新。

如果您绝对必须从并发症处理它:

您可以让预定的时间线更新获取扩展以启动NSURLSession后台任务,以异步方式从您的气象服务下载信息。然后,第一个(计划的)更新将结束,没有新数据。收到新的天气数据后,您可以执行第二次(手动)更新,使用刚收到的数据重新加载并发症时间线。

我对此方法没有任何个人经验,主要是因为不需要背对背时间线更新。