2

新しい iOS 8 Today ウィジェットにコードを書いていますがwidgetPerformUpdateWithCompletionHandler:、ivar (から作成@property) が呼び出されるたびにリセットされることに気付きました。新しいView Controllerがインスタンス化されるたびに似ています。

これにより、ウィジェットの更新間 (たとえば、ウィジェットがバックグラウンドにあり、そのコンテンツを更新するために呼び出されている間) にデータをメモリに保存することができなくなります。

これは正常な動作ですか、それともバグですか? NSUserDefaultsリセットされているメモリベースのデータに依存する代わりに、単純な数値を保存する必要がありますか?

4

1 に答える 1

0

への呼び出しの間に内線番号が実行されることはありませんwidgetPerformUpdateWithCompletionHandler:。このメソッドは、iOS が拡張機能をバックグラウンドで起動して新しいデータをフェッチするときに呼び出されます。次に、OS は拡張機能の画像をキャプチャし (これが完了ハンドラーの目的です)、拡張機能の一種の「起動画面」として表示します (通知センターが起動されると、拡張機能はすぐには利用できないため、画像が表示されるまで画像が表示されます)。です)。NSUserDefaults更新されたデータがサーバーから来るのを待っている間に、(または別の方法で) キャッシュされたデータを保存してロードすることをお勧めします。

つまり、OS は定期的にアプリを起動して新しいデータを取得できるようにするため、ユーザーは通知センターで常に更新されたデータを確認できます。拡張機能が通知センター用に起動されたときに拡張機能をより速くロードできるように、このデータをそのメソッドにキャッシュする必要があります。これはすべてここで議論されています。

于 2014-10-09T19:16:36.880 に答える