2

AppExtensions をサポートするアプリを作成するために、すべてのデータをアプリ グループのコンテナー領域に格納することを検討しています。

iOS8 で App Groups のコンテナ領域にすべてのデータを保存するのに弱点はありますか? アプリ グループのコンテナー領域に限定されたデータを保存する必要がありますか?

アプリ拡張プログラミング ガイド: 一般的なシナリオの処理

4

1 に答える 1

5

当然それはあなたのアプリに依存しますが、ここに私の2セントがあります:

すべての情報を共有ディレクトリに保存するのは完全にやり過ぎであり、適切な理由から来るとは思えません。アプリが必要とするすべての情報がウィジェットに必要であると思われる場合は、おそらくウィジェットの複雑さを再考する必要があります。

これによって達成されるのは、単純さ (単一の責任によって複雑さを隠す) ではなく、利便性 (将来の頭痛の種) です。注意点は、アプリケーションが成長し、より複雑になるにつれて、App Container (大規模なビュー コントローラー) 内の情報を容易にするために、より多くの時間を費やすことになるということです。あなたが努力したいのは、単一の責任です。代わりに、2 つのアプリの情報を 1 つのコンテナーにまとめるオブジェクトが必要になります。

読み取りと書き込みの調整について心配する必要があるため、共有コンテナーもアプリ サンドボックスとは異なります。そのため、通常は Core Data または NSUserDefaults (スイート名でインスタンス化) を使用するのが最善です。アプリが画像やその他のコンテンツを保存している場合、あなたは苦痛の世界に直面しています. Appleでさえ、User Defaults (彼らが提供する唯一の例であるため) または CoreData を推奨しています。

アプリ グループを有効にすると、アプリ拡張機能とそれに含まれるアプリの両方が NSUserDefaults API を使用して、ユーザー設定へのアクセスを共有できます [...] データの破損を回避するには、データ アクセスを同期する必要があります。Core Data、SQLite、または Posix ロックを使用して、共有コンテナー内のデータ アクセスを調整します。

ウィジェットの目的は、アプリの最新の概要を提供することです。ウィジェットがアクセスできるデータの量を最小限に抑えることで、多くの頭痛の種が軽減されるだけでなく、ウィジェットがより適切に含まれるようになります。大きな力には大きな責任が伴うことを忘れないでください。すべての情報を 1 つの共有コンテナーに保存すると考えると、責任を負うべきことがたくさんあります...

最近、トップ ニュース記事を表示するニュース アプリのウィジェットと、ウィジェットが表示するコンテンツをパーソナライズする機能の作成を完了しました。アイデアを提供するために、データの永続性の基本的な内訳を次に示します。

ストレージの内訳

ウィジェット

  • 現在表示されている画像
  • JSON フィードの最終更新日 (つまり、新しいコンテンツが追加されたことをいつウィジェットに通知するかがわかります)

アプリ

  • すべてのストーリー、画像、ユーザー コンテンツなど

共有コンテナ

  • ユーザーが選んだトピック
  • トップストーリー一覧

ウィジェットは、コンテンツを取得するように求められると、すべてのトピックのトップ ストーリーを含む JSON ファイルをダウンロードします。この JSON は、共有コンテナーに永続化されます。すべてのストーリーを保存する理由は、ユーザーがお気に入りのトピックを変更した場合に備えて、すべてのトピックが保存されているため、ウィジェットはその選択を簡単に更新できます。これにより、アプリはトップ ストーリーを更新し、ウィジェットはそれをすぐに反映することもできます。

ウィジェットは、ユーザーが指定したトピック タグに一致する 3 つのトップ ストーリーを抽出します。これらのトップ トピックは、共有のユーザー デフォルト アイテムに保持されます。当然ながら、ユーザーがトピックを選択する前にウィジェットが開かれる可能性があります。この場合、ウィジェットは最初の 3 つほどのトピックを自動的に選択します。

TL;DR

メタファー - ウィジェットとアプリが職場の同僚である場合、共有コンテナーはコンピューターのようなものです。毎日、同じコンピューターで誰かと一緒に仕事をすることは、どれほど生産的でしょうか?

于 2015-01-29T11:38:08.930 に答える