NSTreeController add和addChild方法

时间:2011-09-11 17:53:55

标签: objective-c cocoa add nstreecontroller

GOTO UPDATE

我有一个NSTreeController控制器,它将(Content Object)绑定到我的应用程序委托的内容(NSTreeNode *)。我的窗口中还有NSOutlineView绑定到我的控制器。

一切正常,内容以大纲视图显示,但我不能addaddChildinsert等)通过控制器方法和canAdd的任何项目(canAddChild NO等)控制器的方法总是返回@interface MyNode : NSTreeNode { NSString* title; } @property (retain) NSString* title; @end (我有一个按钮,“启用”被绑定到控制器,这个按钮被禁用)。

我的错误在哪里?

更新

我想提供一些有关我情况的更多信息。

我有一个MyNode类:

childrenKeyPath

我的nib文件中也有NSTreeController对象。 IB中的childNodes设置为countKeyPathisLeafKeyPathClass为空。

控制器模式设置为MyNode,类名称为MyDocument

内容对象(不是内容数组)绑定到rootNode s @property (readonly) MyNode* rootNode; ... rootNode = [[MyNode alloc] init]; rootNode.title = @"Root"; MyNode *childNode = [[MyNode alloc] init]; childNode.title = @"Child"; [[rootNode mutableChildNodes] addObject:childNode]; 属性:

content

我的窗口中有NSOulineView,arrangedObjects绑定到TreeController的addChild。显示内容。我甚至可以编辑节点的标题,但是我无法通过TreeController添加或插入任何(子)节点。

我有2个按钮:与TreeController的insertChildcanAddChild操作相关联的“添加子项”和“插入子项”已启用绑定到canInsertChild@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]; TreeController的属性。按钮被禁用..我无法添加或插入任何子节点。

哪里出错?

更新2

我有一些好消息=)

我改变了我的Document类:

MyDocument.rootNodes

内容数组(不是内容对象)绑定到rootNodes属性,一切正常。

为什么addXXX方法不适用于单个对象?我在文档中找不到任何关于它的内容......

为什么TreeController会将根元素添加到rootNodesNSArrayNSMutableArray,而不是{{1}}。

2 个答案:

答案 0 :(得分:0)

我想我已经拥有了!尝试将childrenKeyPath设置为mutableChildNodes

答案 1 :(得分:-1)

您不应该通过编写

来添加节点
[rootNodes addObject:rootNode];

相反,你应该在你的XIB / NIB文件的文件所有者(MyDocument类)中有这个:

IBOutlet NSTreeController* treeController;

将IB中的Outlet与树控制器连接起来。然后写下:

//[rootNodes addObject:rootNode];
  [treeController addObject:rootNode];

通过这样做,你也可以摆脱rootNodes init:

//rootNodes = [[NSMutableArray alloc] init];

此外,要添加子节点,您可以使用

[treeController addChild:childNode];

这会将childNode添加到当前选定的节点。