2 つのアレイ コントローラを 1 つのテーブル ビューに接続できないため、2 つ目のアレイ コントローラが機能しなかったようです。
ツリー コントローラー (コントローラー キー: selection、モデル キー パス: allChildLeafs) にバインドされていた配列コントローラーはそのまま残りましたが、どのビューにもバインドされていませんでした。
Xcode で IBOutlet NSArrayController が作成され、Interface Builder (IB) で新しく作成されたアレイ コントローラーに接続されました。また、setter メソッドと getter メソッドを使用して、新しい NSMutableArray が宣言されました。次に、次のコードを使用して、配列コントローラーを新しい NSMutableArray にバインドしました。
[newArrayController bind:NSContentArrayBinding toObject:self withKeyPath:@"mutableArray" options:nil];
したがって、配列コントローラーは、新しい可変配列にあるものは何でも「保持」します。新しいアレイ コントローラをテーブル ビューに接続すると、アレイの内容をテーブル ビューに表示できます。
必要なのは、この可変配列に各車の NSMutableDictionary オブジェクトを含めることだけでした。各ディクショナリには 3 つのキーと値のペアがあります。3 つのキーは、「carName」、「mostPopularColor」、「secondMostPopularColor」です。
古い配列コントローラーは現在アウトライン ビューで選択されている "Car" オブジェクトの配列を保持していたので、これはまず "Car" オブジェクトの配列を取得することによって行われました。これを行うために、古い配列コントローラーの ArrangeObjects の変更が観察され、「Car」オブジェクトの新しい配列が以下を使用して観察されました。
[oldArrayController addObserver:self forKeyPath:@"arrangedObjects" options:NSKeyValueObservingOptionNew context:nil];
観測を処理し、「Car」オブジェクトの新しい配列を使用して辞書オブジェクトの最終的な配列を取得するために、次のメソッドが実装されました。
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {if (object == selectedChildLeafsController)
{
if ([[object arrangedObjects] count] > 0)
{//make a new mutable array, here called "array", of dictionaries from your array of "Car" objects which is found in [object arrangedObjects] . And then something like...
[self setMutableArray: array];
[newArrayController bind:NSContentArrayBinding toObject:self withKeyPath:@"selectedBonds" options:nil];}else
{
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}}