Apple Watch 复杂网络请求

Apple Watch complication network requests

我正在创建一个从在线 API.

中提取信息的天气应用程序

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

如果是这样,我该怎么做?

您将 运行 进入 ,这主要是由于在 时间线更新完成后 收到数据。

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

The job of your data source class is to provide ClockKit with any requested data as quickly as possible. The implementations of your data source methods should be minimal. Do not use your data source methods to fetch data from the network, compute values, or do anything that might delay the delivery of that data. If you need to fetch or compute the data for your complication, do it in your iOS app or in other parts of your WatchKit extension, and cache the data in a place where your complication data source can access it. The only thing your data source methods should do is take the cached data and put it into the format that ClockKit requires.

其他方法:

  • 更新您的并发症的最佳方法(从您的 phone 一旦您收到更新的天气数据)是使用 transferCurrentComplicationUserInfo.

  • 或者,您可以让您的手表应用程序或 glance 缓存其最新的天气详细信息,以供下一次计划更新使用。

如果你绝对必须从并发症中处理:

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

我对这种方法没有任何个人经验,主要是因为不必要地需要连续更新时间线。