Какао: пользовательский ключ контроллера для NSArrayController - PullRequest
0 голосов
/ 15 сентября 2010

Можно ли создать пользовательский ключ контроллера для NSArrayController? Есть ключи для "упорядоченного объекта", "выбора" и т. Д. ... Возможно ли реализовать свой собственный? Кажется, я нигде не могу найти никакой информации об этом.

Моя причина желания сделать это (кроме того, что это кажется полезным, чтобы быть в состоянии сделать):

У меня есть объект "Автомобиль" с атрибутами "цвет" и "пробег" и контроллер массива "CarArrayController", который содержит эти объекты и отображает их в таблице. Под таблицей я хочу два текстовых поля, одно из которых отображает общий пробег красного автомобиля, а другое - общий пробег синего автомобиля. Очевидно, что я могу отобразить общее количество всех автомобилей: значение привязки к «CarArrangedController.arrangedObjects. @ Sum.m Пробег», но до сих пор я не смог получить отдельные суммы для красных и синих автомобилей без реализации большего количества массивов или контроллеров массивов.

Если бы я мог создать Контроллерный ключ "layoutRedCarObjects", который, очевидно, возвращал только красные автомобили, я мог бы иметь привязку к: "CarArrangedController.arrangedRedCarObjects. @ Sum.milet".

Кажется, я не могу найти способ достичь своей цели :(

Должен быть способ получить нужный мне результат (похоже, это общая проблема), пожалуйста, помогите!

Приветствия,

Oli

Ответы [ 2 ]

1 голос
/ 15 сентября 2010

Ключи контроллера - это не просто строки: это методы NSArrayController, каждый из которых проходит через некоторую логику, создает объект и возвращает этот объект.Вы не можете просто добавить ключи , потому что за ключом не было бы никакой логики.

Так что, если вы не хотите создавать больше контроллеров массива, вам нужно сделатьболее способный контроллер массива.Создайте подкласс NSArrayController, который реализует методы для ключей, которые вы хотите, и в этих методах спросите себя об исходном массиве (например, arrangedObjects), выполните все необходимые ограничения и перестановки и верните этот результат.

Не забудьте объявить ваши новые методы как зависящие от их свойств источника (например, arrangedRedCarObjects как зависящие от arrangedObjects).Другое дело, что простого добавления ключей в список невозможно: он не знает, от какого свойства / -ов источника должен зависеть ваш новый ключ.

0 голосов
/ 15 сентября 2010

Если у вас есть какой-то способ спросить у автомобиля, является ли он красным или синим, вы можете создать два вторичных контроллера массива, питаемых первичным (связать массив содержимого вторичного контроллера с arrangedObjects первичного контроллера), каждый с предикатом фильтра, который ограничивает массив до соответствующего цвета автомобиля.

...