Методы добавления NSTreeController и addChild - PullRequest
1 голос
/ 11 сентября 2011

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.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2011

Вы не должны добавлять узлы, записывая

[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 к выбранному в данный момент узлу.

0 голосов
/ 12 сентября 2011

Я думаю, что понял!Попробуйте установить childrenKeyPath на mutableChildNodes.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...