Если вы хотите простой встроенный параметр, тогда он будет создавать экземпляр класса, указанного вами в 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];
Есть примеры этого в другом месте в КВО, как и с +keyPathsForValuesAffecting<Key>
(documentation here), в котором описаны ключи, вызывающие обновление другого ключа. Если ключ называется fullName
и обновляет каждый раз, когда первые или последние изменения имени, вы можете реализовать это в своем классе:
+ (NSSet *)keyPathsForValuesAffectingFullName {
return [NSSet setWithObjects:
@"firstName",
@"lastName",
nil];
}
Далее поиск (и this question) превратили этот documentation page, что объясняет семантику, как это метод вызывается.
Что вы пробовали с контроллером дерева, и как это случилось? Это была бы полезная информация. – Dov
Скажем, у меня есть два типа узлов: папка и объект Person. В IB, установив имя класса контроллера контроллера дерева в папку «Папка» или «Человек», я могу добавить один или другой. Но это не позволяет добавлять ни папку, ни Person в зависимости от глубины в дереве или с помощью другой пары кнопок добавления и удаления. –