我正在创建一个天气应用程序,可以从在线API中提取信息。
我能够在GlanceController和InterfaceController中成功获取信息。但是,我有点不确定如何为复杂化做这件事。我可以在ComplicationController类中执行网络请求吗?
如果是这样,我将如何做到这一点?
答案 0 :(得分:1)
您将遇到issues related to asynchronously fetching data from within the complication data source,主要原因是在时间线更新完成后收到了数据。
数据源类的工作是尽快为ClockKit提供任何请求的数据。数据源方法的实现应该是最小的。不要使用数据源方法从网络获取数据,计算值或执行任何可能会延迟传输数据的操作。如果您需要获取或计算并发症的数据,请在iOS应用程序或WatchKit扩展的其他部分中进行,并将数据缓存在复杂数据源可以访问的位置。您的数据源方法应该做的唯一事情是获取缓存的数据并将其放入ClockKit所需的格式。
其他接近方式:
更新复杂功能的最佳方法(一旦收到更新的天气数据,请通过手机更新)是使用transferCurrentComplicationUserInfo
。
或者,您可以将手表应用或浏览缓存其最新的天气详细信息,以便进行下一次预定更新。
如果您绝对必须从并发症处理它:
您可以让预定的时间线更新获取扩展以启动NSURLSession后台任务,以异步方式从您的气象服务下载信息。然后,第一个(计划的)更新将结束,没有新数据。收到新的天气数据后,您可以执行第二次(手动)更新,使用刚收到的数据重新加载并发症时间线。
我对此方法没有任何个人经验,主要是因为不需要背对背时间线更新。