コンプリケーションが起動するたびに、バックグラウンド ダウンロードを開始したいと考えています。
コンプリケーション コントローラーで非同期にデータを取得しようとしている場合、信頼性が低く、推奨されていないことがわかります。
コンプリケーションの実行時間の予算を不必要に使い果たすことを避けるために、携帯電話にバックグラウンド フェッチを処理させてから、WCSession
インスタンスを使用してtransferCurrentComplicationUserInfo
. これにより、拡張機能を起動してデータを配信する優先度の高いメッセージが送信されます。
その時点で、次のいずれかを行います。
特定の詳細については、watchOS 2 移行ガイドの「合併症データの更新」の下に記載されています。
データを更新するためのさまざまなアプローチ:
拡張機能による明示的な手動更新
コンプリケーションの新しいデータがある場合は、CLKComplicationServer オブジェクトの reloadTimelineForComplication: または extendTimelineForComplication: メソッドを使用して、コンプリケーションを更新する準備ができていることを ClockKit に通知する必要があります。... これらのメソッドを呼び出すと、ClockKit がデータ ソース オブジェクトを作成し、そこから新しいデータを要求します。
コンプリケーション コントローラーを介したスケジュールされた自動更新 (キャッシュ データを使用)requestedUpdateDidBegin
スケジュールされた更新は、予測可能な時間にデータが変更されるアプリに役立ちます。スケジュールされた更新が発生すると、ClockKit は最初にデータ ソースの requestedUpdateDidBegin または requestedUpdateBudgetExhausted メソッドを呼び出します。これらの方法を使用して、新しいデータが利用可能かどうかを判断します。
プッシュ通知WKExtensionDelegate
didReceiveRemoteNotification
による手動更新WCSession
transferCurrentComplicationUserInfo
iOS アプリは、コンプリケーション用の更新データを受信すると、Watch Connectivity フレームワークを使用してコンプリケーションをすぐに更新できます。WCSession の transferCurrentComplicationUserInfo: メソッドは、優先度の高いメッセージを WatchKit 拡張機能に送信し、必要に応じてそれを起動してデータを配信します。データを受信したら、必要に応じてタイムラインを延長またはリロードして、ClockKit がデータ ソースから新しいデータを要求するように強制します。
いずれにせよ、複雑化コントローラーは、必要なデータを (非同期で) 取得しようとするのではなく、利用可能な新しいデータを使用するだけです。