Методы добавления 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,

Объект содержимого (не массив содержимого) связан с MyDocuments 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 в текущий выбранный узел.

Другие вопросы по тегам