GOTO UPDATE
У меня есть NSTreeController
контроллер, который связал (Content Object
) с содержимым (NSTreeNode *
) моего делегата приложения. Также у меня есть NSOutlineView
в моем окне, которое привязано к моему контроллеру.
Все отлично работает, содержимое отображается в виде структуры, но я не могу add
(addChild
, insert
и т. Д.) Какие-либо элементы, хотя методы контроллера и canAdd
(canAddChild
и т. Д.) Методы контроллера всегда возвращайте NO
(у меня есть кнопки, которые «включены» привязаны к контроллеру, и эти кнопки отключены).
Где моя ошибка?
UPDATE
Я хочу дать больше информации о моей ситуации.
У меня есть класс MyNode:
@interface MyNode : NSTreeNode {
NSString* title;
}
@property (retain) NSString* title;
@end
У меня также есть объект NSTreeController в моем nib-файле. childrenKeyPath
установлен в childNodes
в IB, а countKeyPath
и isLeafKeyPath
пусты.
Режим контроллера установлен на Class
, а имя класса - MyNode
.
Объект Content (не Content Array) привязывается к свойству 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 arrangedObjects
. Содержание отображается. Я даже могу редактировать заголовок своих узлов, но не могу добавлять или вставлять какие-либо (дочерние) узлы через мой TreeController.
У меня есть 2 кнопки: «Добавить дочерний элемент» и «Вставить дочерний элемент», подключенные к действиям TreeController addChild
и insertChild
и активированные, привязанные к свойствам canAddChild
и canInsertChild
TreeController. Кнопки отключены ... и я не могу добавлять или вставлять дочерние узлы.
Где ошибка?
ОБНОВЛЕНИЕ 2
У меня есть хорошие новости =)
Я изменил свой класс документов следующим образом:
@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
.