0

私は何かが欠けているに違いない。私は、Aaron Hillegass による Cocoa Programming の「Key-Value Observing」というタイトルの章に参加しています。

RaiseMan からの従業員の追加と削除をアプリケーションが元に戻したりやり直したりできるようにするコードを挿入しました。アプリケーションは動作しますが、私が疑問に思っているのは、「従業員の追加」を NSArrayController の ADD メソッド (.xib ファイルを使用) にリンクすると、それが呼び出される理由です。

- (void)insertObject:(Person *)p inEmployeesAtIndex:(int)index;

Key-Value コーディングによると、add メソッドを呼び出すべきではありませんか?

- (void)addEmployeesObject:newEmployee;

「挿入」メソッドではなく「追加」メソッドをリンクしています。

4

2 に答える 2

1

これは、 KVC コレクションのアクセサ メソッドを使用する場合に予想される動作です。目的の場所にオブジェクトを挿入する方が (その場所が最後にある場合でも)、「最後にある」と考えて -add... を直接呼び出すよりも効率的です。このすべては、たとえば、変更の範囲が既にわかっている場合に配列全体をまったく新しい (-setEmployees: など) 配列に置き換えるよりもはるかに効率的です。NSArrayController は、制御している配列にオブジェクトを挿入するときに、最終的にこのメソッドを使用します。

于 2012-06-25T14:56:56.173 に答える
1

配列コントローラーは、順序付けられたコレクション (配列) にバインドされています。insertObject:inEmployeesAtIndex:そのため、コレクションの最後に新しいオブジェクトを追加するために使用します。

このaddEmployeesObject:メソッドは、コレクションが順序付けられていない (つまり、セット) 場合に使用されます。

于 2012-06-25T14:59:07.933 に答える