配列なしのNSArrayController
-
06-07-2019 - |
質問
NSArrayControllerを使用するには2つの方法があることに気付きました。
ControllerをArrayにバインドし、Arrayにオブジェクトを追加します。または、配列をまったく使用せず、コントローラーにオブジェクトを直接追加します。
[racesArray addObject: [[Race alloc] initWithName:@"Human"] ];
または
[myRacesController addObject: [[Race alloc] initWithName:@"Human"] ];
どちらのバージョンも私のニーズに合っているので、どちらを使用するのが正しいのか疑問に思います。配列を使用するほうが良いかもしれませんが、NSArrayControllerもデータを保存できるので、なぜこの機能を使用しないのですか?
解決
最初の例のように配列と直接対話しないでください。アレイコントローラーは、変更に関するKVO通知を明示的に投稿しない限り、変更を検出しません。これは面倒で、忘れがちです。
推奨する方法は、アレイコントローラーをバインドし、プロパティのKVC準拠の配列アクセサメソッドを使用し、アプリ内のすべての場所で使用します(クラスの init
および dealloc
メソッドを除く)。
そのようにして、オブジェクトは、KVO通知を明示的に投稿したり、配列コントローラーについて知る必要なく、独自の配列を変更できます。
他のヒント
どちらの方法でも構いません。配列を指定しない場合、 NSArrayController
は独自の配列を保持します。
NSArrayControllerは、UI要素とのバインドに関してKVOに準拠しています。また、selectedObjectなどのオブジェクトの配列用の追加のメタデータもあります。これらの便利なオブジェクトは、NSArrayでは使用できません。 NSArrayは、通常の配列演算子とメソッドが定義された単なる配列です。 UI要素とバインドする必要がない場合に使用します。