异构的NSTreeController

时间:2010-04-02 16:34:09

标签: objective-c cocoa nsoutlineview nstreecontroller

我有一个NSTreeController(向NSOutlineView提供内容)。我希望顶级对象属于一个类,所有其他对象(因此,任何级别的子级)都属于另一个类。什么是最好的方法呢?

我想,我需要以某种方式改变至少addaddChildinsertinsertChild的行为。不过,我希望找到一种简单的方法来解决这个问题,而不是改变四种不同的方法。

2 个答案:

答案 0 :(得分:0)

在我看来,您可以在对象中创建一个属性,以区分哪些对象应该使用您修改的方法,哪些不应该。然后只需输入一个简单的if语句来测试子类方法中的该属性。如果您的对象没有该属性,那么让超类树控制器处理它,否则改变您的行为。

答案 1 :(得分:0)

这很有用,我没有重写任何功能:

- (void)insertChild:(id)sender
{
    if ([self selectionIndexPath])
    {
        [self setObjectClass:[IRGroup class]];
        [super insertChild:sender];
    }
    else
    {
        [self setObjectClass:[IRFloor class]];
        [super insertChild:sender];
    }
}

这并不容易;我尝试重写newObject,因为Apple的文档声称在插入兄弟子元素时调用它,但我的测试显示在插入兄弟姐妹时只调用