Методы добавления NSTreeController и addChild
GOTO ОБНОВЛЕНИЕ
у меня есть NSTreeController
контроллер, который связан (Content Object
) к содержанию (NSTreeNode *
) моего делегата приложения. Также у меня есть NSOutlineView
в моем окне, которое привязано к моему контроллеру.
Все отлично работает, содержимое отображается в виде структуры, но не могу add
(addChild
, insert
и т.д.) любые элементы, хотя методы контроллера и canAdd
(canAddChild
и т.д.) методы контроллера всегда возвращаются NO
(У меня есть кнопки, которые "включены" привязаны к контроллеру, и эти кнопки отключены).
Где моя ошибка?
ОБНОВИТЬ
Я хочу дать больше информации о моей ситуации.
У меня есть класс MyNode:
@interface MyNode : NSTreeNode {
NSString* title;
}
@property (retain) NSString* title;
@end
У меня также есть объект NSTreeController в моем файле пера. childrenKeyPath
установлен в childNodes
в IB и тому countKeyPath
а также isLeafKeyPath
пусты
Режим контроллера установлен на Class
и имя класса MyNode
,
Объект содержимого (не массив содержимого) связан с MyDocument
s rootNode
имущество:
@property (readonly) MyNode* rootNode;
...
rootNode = [[MyNode alloc] init];
rootNode.title = @"Root";
MyNode *childNode = [[MyNode alloc] init];
childNode.title = @"Child";
[[rootNode mutableChildNodes] addObject:childNode];
И у меня есть NSOulineView в моем окне, которое content
привязан к TreeController's arrangedObjects
, Содержание отображается. Я даже могу редактировать заголовок своих узлов, но я не могу добавлять или вставлять какие-либо (дочерние) узлы через мой TreeController.
У меня есть 2 кнопки: "Добавить ребенка" и "Вставить ребенка", подключенные к addChild
а также insertChild
действия TreeController и включен привязан к canAddChild
а также canInsertChild
свойства TreeController. Кнопки отключены.. и я не могу добавлять или вставлять дочерние узлы.
Где ошибка?
ОБНОВЛЕНИЕ 2
У меня есть хорошие новости =)
Я изменил свой класс Document следующим образом:
@interface MyDocument : NSDocument {
NSMutableArray *rootNodes;
MyNode* rootNode;
}
@property (readonly) NSArray* rootNodes;
..
rootNodes = [[NSMutableArray alloc] init];
rootNode = [[MyNode alloc] init];
rootNode.title = @"Root";
MyNode* childNode = [[MyNode alloc] init];
childNode.title = @"Child";
[[rootNode mutableChildNodes] addObject:childNode];
[rootNodes addObject:rootNode];
И Связанный Массив Контента (не Объект Контента), чтобы MyDocument.rootNodes
собственность и все работает отлично.
Почему методы addXXX не работают с одним объектом? Я не могу найти ничего об этом в документации...
И почему TreeController может добавлять корневые элементы в rootNodes
? rootNodes
это NSArray
, не NSMutableArray
,
2 ответа
Я думаю, что у меня есть это! Попробуйте установить childrenKeyPath
в mutableChildNodes
,
Вы не должны добавлять узлы, написав
[rootNodes addObject:rootNode];
Вместо этого у вас должно быть это в File's Owner вашего файла XIB/NIB (класс MyDocument):
IBOutlet NSTreeController* treeController;
И соедините этот выход в IB с вашим Tree Controller. Тогда просто напишите:
//[rootNodes addObject:rootNode];
[treeController addObject:rootNode];
Таким образом, вы также можете избавиться от rootNodes init:
//rootNodes = [[NSMutableArray alloc] init];
Также для добавления дочерних узлов вы можете использовать
[treeController addChild:childNode];
Это добавит childNode в текущий выбранный узел.