我有一个NSTreeController(向NSOutlineView提供内容)。我希望顶级对象属于一个类,所有其他对象(因此,任何级别的子级)都属于另一个类。什么是最好的方法呢?
我想,我需要以某种方式改变至少add
,addChild
,insert
和insertChild
的行为。不过,我希望找到一种简单的方法来解决这个问题,而不是改变四种不同的方法。
答案 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的文档声称在插入兄弟和子元素时调用它,但我的测试显示在插入兄弟姐妹时只调用 。