質問

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要素とバインドする必要がない場合に使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top