私は、ユーザの好みを表し、NSString
とNSNumber
をカプセル化する単純なモデルFoo
を持っています。私はFoo
の配列をユーザのデフォルト値に保存して、アプリケーションの起動間に持続するようにしたい。ユーザーが追加、削除、編集できるように、テーブルビューで表示したいと考えています。これに対する解決策は、バインディングではかなり単純に思えましたが、私が実際に作業することは不可能であることが証明されています。NSUserDefaultsControllerにバインドされたNSArrayControllerにバインドされた編集可能なテーブルビュー
私のアプリケーションが起動すると、NSUserDefaults
に登録されています。Foo
の配列のキー付きアーカイブです。私のXIBには、コンテンツの配列が共有ユーザーデフォルトコントローラのvalues
コントローラキーにバインドされたアレイコントローラがあります。キーパスはfoos
です。 '複合値としてのコンテンツの処理'がチェックされました。値トランスフォーマとしてNSKeyedUnarchiveFromData
。次に、テーブルビューはアレイコントローラーと表の列にバインドされ、Foo
のプロパティーにバインドされます。
Foo
がアレイに追加され、アレイから削除されると、これは完全に機能します。foos
ユーザーのデフォルトのキーは、アレイの新しい内容を反映するように更新されます。問題は、個々のプロパティの変更をFoo
は、ユーザーの既定値に書き戻される配列を同様にトリガしないことです。この理由は、「Key-Value Observing Programming Guide」の「Dependent Keysの登録」の「To-many Relationships」のセクションで説明されていると考えられます。アレイコントローラの配列自体の変更はありますが、 。
これを問題として認識したにもかかわらず、私の人生にとっては、この仕事をするために実際に何をするべきかを理解できません。 Foo
の変更を観察すると、通知する必要があるメッセージと、アレイ全体がユーザーのデフォルトに書き戻されるようなメッセージである-NSUserDefaults
、NSUserDefaultsController
、NSArrayController
?アップルのマニュアルには、この問題の簡単な説明以上のものがあり、それを解決するための実際のサンプルコードが用意されています。私はすべてを試しましたが、私は魔法の呪文を見つけることができません。
これはHow to get notified of changes to models via an NSArrayControllerと似ていますが、私がカスタムビューでやっていることと、bind:toObject:withKeyPath:options:
の使用の間で概念的な飛躍をすることはできません。
ありがとうございます! :)
これは実際にNSUserDefaultsではなくCoreDataの仕事のようです。 –
あなたは精巧にできますか? CoreDataでこれを実装することさえ消化するために必要なドキュメントの量を考えてみると、頭痛がでてきます。データモデルの観点から、私がしようとしていることは、非常に簡単なようです.ColumnDataの複雑さを考えると、ここでは過度のようです。 –
よくあるユーザーのデフォルトは設定のためのもので、あなたはそれを使ってあなたのデータモデルを保存しようとしています。あなたが本当にシンプルなデータモデルを持っていれば、CoreDataは本当に難しいことではありません。 xcodeには、基本的にすべての設定を行うプロジェクトテンプレートがあります。あなたが説明する問題も解決するはずです。 –