2009-08-13 1 views
6

私は、アプリケーション状態、特にリスト内の選択された項目をコアデータまたはNSUserDefaultsに保存する必要があるかどうかを判断しようとしています。NSUserDefaultsの代わりにCore Dataにアプリケーション状態が含まれるのはいつですか?

一般的に私は、アプリケーションの設定と状態がNSUserDefaultsに残っている必要があり、モデルレベルのデータはCore Dataなど他の場所でも保持されるべきだと考えています。これまでの私のモデルは:

  • データはまったく保存すべきですか?アプリケーションがマルチドキュメントであれば、設定は希望
    1. :ユーザーが合理的にそれがあることを期待していない場合は、(例えば、カーソル位置がテキストエディットで保存されていない)
    2. NSUserDefaultsを、それを捨てますすべての文書に適用さ
    3. それはデータがモデルの外にデータを持つ
    4. 好みで設定されるだろうと考えますテストのために理にかなっている
  • モデルレベル(1つのモデル店といくつかのデフォルトを交換します)の
    1. データは明らかにモデルレベルのオブジェクト
    2. データの属性として所属はNSUserDefaultsに格納すると、パフォーマンス上の問題を引き起こすことに十分な大きさである
    3. ことは困難または時間集約的に利用者のためになります再作成したデータを(彼らは間違いなく、この情報「データ損失」の損失を検討する)

私はコアデータにおけるいくつかのエンティティのソート順を格納する予定。この情報(すなわち、「sortIndex」または「order」属性)がなければ、各エンティティインスタンスは、ユーザデフォルトからのデータで補強されなければならない。

ただし、モデルに状態を格納するのは滑りやすい斜面のようです。並べ替え順序を格納する場合は、リストの状態の両方であるため、選択を格納することも適切です。私のユースケースの選択データは実際にはかなり大きいかもしれません。具体的には、1つのリスト内のアイコンは、それぞれのサブリスト内の選択に依存する。

NSUserDefaultsとデータモデルの関係で誰かが描くハードラインはありますか?

答えて

5

これはドキュメントベースのアプリケーション(TextEditなど)かライブラリベースのアプリケーション(AddressBookなど)かは言及していません。

このような情報がどこにあるのかを判断するのに役立ちます:ドキュメントベースのアプリケーションを想定します。そのドキュメントがバージョン管理下に置かれていると仮定します(これは、Core DataのXMLデータストアタイプを使用しているときに実際に実行可能です)。アプリを開いて、ドキュメントのソート順を変更します。これはドキュメントを汚すのでしょうか?この変更はチェックインに値するでしょうか?変更はこのリポジトリの他のユーザにとって価値があるでしょうか?

通常、並べ替えの順序は、ドキュメントベースのストレージ(別名NSTableViewのインターフェイスビルダーでの自動保存名)を保証するのには十分ではありません。しかし、あなたのアプリは並べ替え(それのように聞こえる)に優先順位を置くかもしれません。

したがって、固くて速いルールはありません。しかし、私は、バージョン管理下にあるドキュメントを他の人と共有するという考えは、いずれの面でもあなたのケースを作る良い知的フレームワークを提供すると思います。

+0

私の場合はライブラリベースのシナリオに該当するiPhoneアプリです。私は仮説的なマルチドキュメントアプリを検討する精神的モデルが好きですし、その変更がアプリを汚くするかどうかも気に入っています。私の場合は、サブリストを選択すると上位リストのビューが変更されるため(具体的には、サブビューは、上位ビューの項目の隣にどの画像が表示されるかを変更します)。 並べ替えに関して、私はソート順がユーザー定義であることを意味しました。つまり、iTunesでプレイリストを作成するなど、リストを任意に並べ替えることができます。 – orque

+0

「文書を汚すのですか?」を構築すると、「データに変更を加えると、元に戻すスタックに追加されますか」を追加したいと思います。元に戻すとドキュメントベースとライブラリベースの両方のアプリケーションに使用できるので、素晴らしいヒューリスティックのようです。 – orque

2

私はrentzschに同意するが、それを表示する別の方法:

は、データの選択部分であるか、それがメタデータですか?メタデータの場合は、単一のドキュメントに関するメタデータか、次に開くことになっているドキュメントに適用すべき状態ですか?

拡張属性として文書固有のメタデータを格納することができます。たとえば、TextMateは、BBEdit、MPW、およびタブ設定、ウィンドウサイズなどをリソースフォーク内のリソースとして保存するのに使用されているように、この方法でドキュメントの選択を保存します。メタデータはオプションであるとみなされ、文書が取り除かれてもそのまま残されます。

選択がデータの不可欠な部分である場合は、そのようにスウィングする場合は、Core Dataを使用してデータを格納してください。

ドキュメントベースのアプリケーションでない場合、NSUserDefaultsは一般的にバインディングを介して共通のNSViewサブクラスに組み込まれているため、NSUserDefaultsは最も簡単なパスです。

+0

私は同意します。私は既存のモデルが何であるかを忘れていましたので、私は質問を修正しました(私はこれが正しいことだと信じています) 私は情報が "データの不可欠な部分" Rentzschのモデル(汚れたドットを表示すると便利だろう) – orque

2

個人的には、ファイル自体またはNSUSerDefaultsの環境設定を保存するのは難しいことです。

しかし、私は常に明白に向けて傾向がある:ことを保った場合に選択状態の場合、ファイル自体

で好み= NSUSerDefaults

  • ドキュメントの環境が=具体的には、私が判断するだろう

    • アプリケーションをユーザーにとって十分に重要です。ドキュメントを別のコンピュータに移動するには十分であり、重要であれば、ドキュメント自体に保管しておきます。

      重要ではない場合(または該当する場合)、私はそれをまったく保存しても構いません。

  • +0

    私はこれがiPhone上で「ドキュメント」を持っているとは必ずしも考えていないので、それだけですべてのデータです。アプリケーションの切り替えとは、終了と再起動を意味するため、状態の保存はずっと重要になります。 – orque

    +0

    私はiPhoneアプリであっても、ユーザーの現在の場所のセクション状態がデータにとって重要であるとすれば、私はそれを保存します。そうでなければ、気にしません。それがそうであるように聞こえるので、データでそれを保存します。 – Lucien

    関連する問題