1

我正在創建一個天氣應用程序,它從聯機API中提取信息。蘋果手錶併發症網絡請求

我能夠在GlanceController和InterfaceController中成功獲取信息。不過,我有點不確定我應該怎麼做這個併發症。我可以在ComplicationController類中執行網絡請求嗎?

如果是這樣,我該如何去做這件事?

回答

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後臺任務異步下載從你的氣象服務信息。第一個(預定)更新將結束,沒有新數據。一旦接收到新的天氣數據,您就可以執行第二次(手動)更新以使用剛收到的數據重新加載複雜化時間線。

我對這種方法沒有任何親身經歷,主要是因爲不必要的背靠背時間線更新。