ユーザーが画像とテキストを使用してグラフィック コンテンツを作成できる iPad アプリを作成しています。これをカスタム UIView サブクラスの配列のメモリに格納しています。これらの各ビュー サブクラスは、イメージまたはテキストを含むサブビューをいくつでも持つことができます。
次に、これらをデバイスに保存する必要があります。調べてみると、これを行うには多くの方法があるようで、この場合に最適な方法を知りたいと思っています。
ユーザーが画像とテキストを使用してグラフィック コンテンツを作成できる iPad アプリを作成しています。これをカスタム UIView サブクラスの配列のメモリに格納しています。これらの各ビュー サブクラスは、イメージまたはテキストを含むサブビューをいくつでも持つことができます。
次に、これらをデバイスに保存する必要があります。調べてみると、これを行うには多くの方法があるようで、この場合に最適な方法を知りたいと思っています。
最終的に描画アプリになるもののアーキテクチャ設計を求めているようです。これは、実際には特定のユースケースに依存することが最善であり、要件の非常に詳細なリストを提供しない限り、完全に回答できないことを意味します.
しかし、一般的には、あなた自身の特定の核心的な実装と統合する必要がある一般的なヒントをいくつか提供しようとすることができます.
この説明では、このようなアプリが必要とする基本的な使用例に関して、いくつかの仮定を行います。
これは、主な問題は次のとおりです。後で復元するために描画状態を保存する方法は?
それを達成する方法は確かにたくさんありますが、そのうちの2つは「クリーンで十分に有名」と見なされるものだと思います.
これは私のお気に入りではありませんが (維持するのが難しい)、UIView を扱う必要がある場合は、おそらく最も速いでしょう。NSKeyedArchiverは_
.. NSCoder の具体的なサブクラスであり、オブジェクト (およびスカラー値) を、ファイルに格納できるアーキテクチャに依存しない形式にエンコードする方法を提供します。
これはMemento 設計パターンを実装しており、 Pro Objective-C 設計パターンで説明されているのと同じパターンであり、偶然にも、あなたのものに一致する最も重要なユースケースの多くを含むケーススタディを提示します:
- ドローイング パッドでは、ユーザーの指で落書きができます。
[...]- ユーザーは落書きを保存できます。
- これにより、ユーザーは保存された落書きを開くことができます。
[...]
指で線が描けるお絵かきパッドのアプリです。あなたのものは、落書きの代わりに画像とテキストを使用して、これを簡略化したバージョンのように見えます。
では、この特定のケースでは、NSKeyedArchiverを使用する利点は何ですか? UIViewは、オブジェクトをアーカイブするために必要なNSCoding プロトコルを既に実装しています。したがって、保存する必要があるほとんどの情報 (座標、フレーム サイズ、背景色など) については、オブジェクトをアーカイブする以外に何もする必要はありません。
UIView の上にある追加の属性 (たとえば、UIImageView のアーカイブは非常にコストがかかるため、画像のローカル パス)については、この記事を参照してください。NSKeyedArchiverを利用してオブジェクトの状態を保存します。
これはすべて次のように要約されます。
ユーザーが「保存」を押すと、それらをループし、アーカイブを作成して、適切なパスに保存します。パスの最初の要素は図面の名前、2 番目の要素はツールの名前、3 番目の要素はツールが使用されたときの ID です。お気に入り
// A mountain image /<path to you Document dir>/Mountains/Image/1 // A sun /<path to you Document dir>/Mountains/Image/2 // The text "Mountain is awesome" /<path to you Document dir>/Mountains/Text/1
それからもちろん、図面名のリストを plist ファイルまたはNSUserDefaultのいずれかの場所に保存する必要があります。これにより、ユーザーが編集のためにそれらを復元したい場合にそれらを表示できるようになります。
このアプローチの利点の 1 つは、ある日、ツール コンポーネントのプロパティを変更したり、新しいプロパティを追加したりする場合に、スキーマの移行を利用して、新しい更新との下位互換性を提供できることです。そのため、ユーザーは引き続き古い図面を使用できます。
これらは無限の可能性のうちの 2 つです。以下も使用できます。
私が説明した 2 つは、これを行うための通常の方法であり、最も議論されている方法です。本やチュートリアルでそれらを見つけることができ、あなたがしなければならないことに対して非常に多くの柔軟性を与えてくれます.
さらに説明的なリンクが必要な場合は、お知らせください。
最良のオプションは、フォルダーで使用UIDocument
することです。NSFileWrapper
次に、コンテンツが変更されたときに自動的に保存される 1 つのフォルダーにすべてのファイルを保存できます。参照: http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/DocumentBasedAppPGiOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011149-CH1-SW1