Что мне нужно сделать, это просто. Скажем, у меня есть список объектов ученического домена
@implementation Student : CPObject
{
CPString name @accessors;
BOOL isLate @accessors;
BOOL isMale @accessors:
}
У меня есть список этих Student
объектов, хранящихся в NSMutableArray
, который является частью моего модельного объекта.
У меня есть NSTableView
, показывающий эти Student
объекты, в таблице есть флажки для редактирования атрибутов isLate
и isMale
. Таблица опирается на NSArrayController
, который соответствует NSMutableArray
от модели.
В другом месте в интерфейсе я хочу, чтобы в двух текстовых полях отображалось «количество опоздавших учеников» и «число учеников мужского пола», и в этом моя проблема.
Поскольку NSArrayController
поддерживает фильтрацию по предикату, моей первоначальной идеей было создание 3 NSArrayController
объектов, по одному для представления табличного представления, для каждого агрегатного дисплея (количество поздних учеников, число учеников мужского пола). Для агрегатных контроллеров я бы применил фильтрацию и связал текстовые поля с arrangedObjects.@count
. Однако это кажется неправильным подходом, поскольку главный контроллер, вносящий изменения в NSMutableArray
, не сможет сообщить об изменениях, внесенных в 2 других контроллера.
Другой подход, о котором я думал, был упомянут здесь. http://cocoa -nut.de /? Тег = nsarraycontroller . Используя этот подход, я бы связал 2 «ведомых» NSArrayController
, выполняющих агрегатные операции на «главном» контроллере, который поддерживает табличное представление. Однако этот подход тоже не кажется чистым.
В-третьих, я прочитал этот пост здесь: Singleton NSMutableArray, доступ к которому осуществляется NSArrayController в нескольких NIB . Это говорит о том, что вместо этого я должен переместить сложность в мой модельный объект. Возможно, мне следует создать класс StudentList
с атрибутами allStudents
, maleStudents
, lateStudents
для привязки? Это кажется излишним для чего-то такого простого.
В целом, это похоже на довольно распространенную и простую операцию в программе, но я относительно новичок в Какао, поэтому я действительно не уверен, что это «правильный» способ сделать это. Пожалуйста, просветите меня.