我有一个 NSTreeController(向 NSOutlineView 提供内容)。我希望顶级对象属于一个类,而所有其他对象(因此,任何级别的孩子)属于另一个。解决这个问题的最佳方法是什么?
我想我需要以某种方式改变至少add
, addChild
,insert
和的行为insertChild
。不过,我希望找到一种简单的方法来仅在一个位置解决此问题,而不是更改四种不同的方法。
我有一个 NSTreeController(向 NSOutlineView 提供内容)。我希望顶级对象属于一个类,而所有其他对象(因此,任何级别的孩子)属于另一个。解决这个问题的最佳方法是什么?
我想我需要以某种方式改变至少add
, addChild
,insert
和的行为insertChild
。不过,我希望找到一种简单的方法来仅在一个位置解决此问题,而不是更改四种不同的方法。
在我看来,您可以在对象中创建一个属性来区分哪些对象应该使用您修改的方法,哪些不应该。然后只需放置一个简单的 if 语句来测试子类方法中的该属性。如果您的对象没有该属性,则让超类树控制器处理它,否则您会改变行为。
这行得通,我不必重写任何功能:
- (void)insertChild:(id)sender
{
if ([self selectionIndexPath])
{
[self setObjectClass:[IRGroup class]];
[super insertChild:sender];
}
else
{
[self setObjectClass:[IRFloor class]];
[super insertChild:sender];
}
}
这并不容易;我尝试了覆盖newObject
,因为 Apple 的文档声称它在插入兄弟姐妹和孩子时被调用,但我的测试显示它仅在插入兄弟姐妹时被调用。