Если вам нужна простая встроенная опция, то она только создаст экземпляр класса, который вы указали в IB. Чтобы создать другой экземпляр, вам нужно будет написать его самостоятельно. У вас должна быть вся необходимая информация от контроллера дерева, чтобы вставить новый класс в нужное место в иерархии. Некоторый тщательный поиск должен дать вам код, который вам нужен.
Чтобы попытаться помочь вам понять, как работает механизм NSArrayController
, я объясню как можно лучше из моих знаний об Objective-C и времени выполнения. Objective-C - это очень динамичный язык, и вы можете динамически вызывать селекторы (методы). Поскольку NSArrayController
знает имя вашего класса (например, «Сотрудник»), его внутренняя реализация, вероятно, выглядит примерно так (или легко может):
NSString *removeSelectorName = [NSString stringWithFormat:@"removeObjectFrom%@sAtIndex:",
self.objectClassName];
SEL removeSelector = NSSelectorFromString(removeSelectorName);
[dataRepresentation performSelector:removeSelector
withObject:[NSNumber numberWithInt:self.selectionIndex];
В KVO есть примеры этого в другом месте, например, с методом +keyPathsForValuesAffecting<Key>
(документация здесь ), который описывает, какие ключи вызывают обновление другого ключа. Если ваш ключ с именем fullName
и он обновляется каждый раз, когда меняется имя или фамилия, вы должны реализовать это в своем классе:
+ (NSSet *)keyPathsForValuesAffectingFullName {
return [NSSet setWithObjects:
@"firstName",
@"lastName",
nil];
}
Дальнейший поиск (и этот вопрос ) обнаружил эту страницу документации , которая объясняет семантику вызова этого метода.