NSOutlineView + NSTreeNode:我的自定义数据在哪里?

时间:2012-02-06 19:57:21

标签: objective-c cocoa cocoa-bindings

我设置一个绑定到NSTreeController的NSOutlineView,该NSTreeController填充了NSTreeNode个实例,后者使用[NSTreeNode treeNodeWithRepresentedObject:...]附加了我的自定义NodeData对象。 大纲视图渲染得很好,所有数据都按预期存在,一切都很好。

现在在大纲视图的代表中我尝试通过a更改渲染样式 outlineView:willDisplayCell:forTableColumn:item:方法。

但是,item参数不会退回我的自定义数据!

id stuff = [item representedObject];

生成一个类NSTreeNode的实例,其中item为NSTreeControllerTreeNode

到底发生了什么事? 根据所有文档和示例代码,我可以发现代表对象调用应该在构建树时将NodeData对象反馈给NSTreeNode。

完全无能为力,因为我似乎是唯一遇到这个问题的人所以我必须在某个地方做一些非常愚蠢的事情 - 但我无法看清代码的错误。

使用setContent:[dataSource sillyHack]以编程方式填充树控制器 这个琐碎的内容显示了相同的行为:

- (NSMutableArray *) sillyHack
{
   NSMutableArray *nodeArray = [NSMutableArray array];

   NodeData *scaleTypeListNode = [[NodeData alloc] initWithName:@"123"];
   NSTreeNode *scaleTypeListTreeNode = [NSTreeNode treeNodeWithRepresentedObject:scaleTypeListNode];
   [scaleTypeListNode release];

   [nodeArray addObject:scaleTypeListTreeNode];
   return nodeArray;
}

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:1)

您应该使用自己的数据实例填充NSTreeController,而不是NSTreeNode。