将NSTreeController跟NSOutlineView绑定起来之后又想在delegate或datasource里取出自定义结点数据来控制OutlineView的行为。这样应该怎么办呢?
这里解释一下。
NSTreeController在生成树的时候会使用NSTreeNode类,这个类是Cocoa自带的类,所有的结点都会转换成此类型,比如我使用自定义类DTTreeNode作自定义结点。NSTreeNode会把它封装。
这里我尝试了一下在delegate里,item参数是NSTreeControllerTreeNode类型,Cocoa里根本没有这个类型,这个类型应该是运行时生成的。它就是NSTreeNode类对象。
查一下NSTreeNode类的文档:
有这么一个方法:- (id)representedObject
经测试它返回的就是DTTreeNode自定义节点类型。
那么举例如下:
- -(BOOL) outlineView:(NSOutlineView *)outlineView shouldExpandItem:(id)item
- {
- if ([[(DTTreeNode*)[(NSTreeNode*)item representedObject] children] count] > 0)
- {
- return YES;
- }
- return NO;
- }
这个就可以访问自定义节点数据了。