web-dev-qa-db-ja.com

iOS 8 TodayウィジェットのwidgetPerformUpdateWithCompletionHandlerの目的は何ですか?

答えを探し回っていますが、すべてがあいまいまたは不明確に見えます。

とにかく、関数の目的が何であるかを知りたいだけです:

widgetPerformUpdateWithCompletionHandler

今日のウィジェットで行います。

Appleによると

このメソッドは、スナップショットなどの操作の前に、ウィジェットにそのコンテンツを更新してビューを再描画する機会を与えるために呼び出されます。ウィジェットがコンテンツの更新(および必要に応じて再描画)を完了すると、ウィジェットは完了ハンドラーブロックを呼び出し、適切なNCUpdateResult値を渡す必要があります。

スナップショットはいつ発生しますか?拡張機能をデバッグするときはいつでも、widgetPerformUpdateWithCompletionHandlerは常にloadViewの後に呼び出されます。では、すでにloadViewに情報をロードしているときに、このメソッドで情報を明示的に再ロードする目的は何ですか?


このウェブサイトによると: http://www.karlmonaghan.com/tag/today-widget/

TodayViewControllerには、ネットワークからデータをロードする必要がある2つの場所があります。ウィジェットが作成されたときとwidgetPerformUpdateWithCompletionHandlerが呼び出されたときです。前者の場合、投稿をviewDidLoadにロードして、ウィジェットが表示されるまでに準備ができるようにします。 iOSは、ウィジェットが最初に表示された後にユーザーに表示されると判断すると、widgetPerformUpdateWithCompletionHandlerが呼び出され、ウィジェットに表示された投稿を更新する機会を与えます。

上記と同じ質問。

29
ktzhang

通知センターを表示するたびにウィジェットが作成されるわけではないため、ウィジェットが表示されるたびにloadViewが呼び出されることはありません。通知センターは、ウィジェット情報を更新する必要があると判断したときに、代わりにwidgetPerformUpdateWithCompletionHandlerを呼び出します。私自身のデバッグからは、ウィジェットが最初に作成されたときにwidgetPerformUpdateWithCompletionHandlerがほぼすぐに呼び出されるように見えるので、そこですべての読み込みを行うことができますが、Appleは開始することをお勧めしますライフサイクルのできるだけ早い段階でロードプロセス。

ウィジェットに表示される情報が変更されない場合は、widgetPerformUpdateWithCompletionHandlerで何もする必要はありません。

12
Karl Monaghan