Кажется, что второй контроллер массива не работал, потому что невозможно подключить два контроллера массива к одному табличному представлению.
Контроллер массива, который был связан с контроллером дерева (ключ контроллера: выбор,Путь ключа модели: allChildLeafs) был оставлен на месте, но не привязан к какому-либо представлению.
В Xcode был создан NSOrayController IBOutlet, а затем подключен к вновь созданному контроллеру массива в Интерфейсном Разработчике (IB).Также был объявлен новый NSMutableArray с методами установки и получения.Затем для связывания контроллера массива с новым NSMutableArray использовался следующий код:
[newArrayController bind:NSContentArrayBinding toObject:self withKeyPath:@"mutableArray" options:nil];
Так что теперь контроллер массива будет «держать» все, что было в новом изменяемом массиве.Содержимое массива можно отобразить в табличном представлении, подключив новый контроллер массива к табличному представлению.
Все, что нужно было сделать, чтобы этот изменяемый массив содержал объект NSMutableDictionary для каждой машины.Каждый словарь будет иметь три пары ключ-значение.Вот три ключа: «carName», «mostPopularColor», «secondMostPopularColor».
Поскольку старый контроллер массива содержал массив объектов «Car», выбранных в данный момент в виде структуры, это было сделано путем первого полученияэтот массив "автомобилей" объектов.Чтобы сделать это, наблюдались изменения в упорядоченных объектах старого контроллера массива, и новый массив объектов "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];
}}