2011-11-18 60 views
3

我有一个NSTreeController绑定到NSOutlineView(没有核心数据)。可可的参考:NSTreeController添加:方法不添加“当前选择后”

地址:
当前选择后添加一个对象接收
- (void)add:(id)sender

什么绊倒我出去的是,当添加方法被调用它把新的项目在列表的末尾,选定项目后不。插入方法似乎按预期工作(在选择之前添加的项目)。难道我做错了什么?如何在选定的项目之后插入新节点,而不是在列表的末尾?

+0

也许这是我做错了,但似乎NSTreeController和NSTreeNodes似乎是非常适合的点的错误。我尝试过获取父节点(这是本例中的根节点)并通过** mutableChildNodes:**创建一个NSMutableArray,然后向该数组添加一个节点。当我这样做时,我得到一个异常**“ - [NSTreeNode _setupObserving]:无法识别的选择器发送到实例0x20004f640 ”**,这对我来说意味着NSTreeNode不符合KVO,即使文档声明它们是。 – Gobot

+0

您在Interface Builder中为NSTreeController的KVO设置了哪些键,这听起来更像是绑定问题,而不是bug。 – LearnCocos2D

回答

1

这是我最终做的,我实现了一个NSIndexPath类别,它计算下一个索引路径,并用它来插入一个节点。这里是类别:

@implementation NSIndexPath (additions) 
(NSIndexPath *)nextIndexPath:(NSIndexPath *)startingIndexPath 
{ 
    NSUInteger pathIndexesArray[[startingIndexPath length]]; 
    [startingIndexPath getIndexes:pathIndexesArray]; 
    pathIndexesArray[[startingIndexPath length] - 1]++; 
    return [NSIndexPath indexPathWithIndexes:pathIndexesArray length:[startingIndexPath length]]; 
} 
@end 
1

你可能想要做的是致电insertObject:atArrangedObjectIndexPath:

创建一个IBAction(即:(IBAction)addAfterSelection:(id)sender)并让它实例化您的对象,将所选的indexPath指定为insertObject:atArrangedObjectIndexPath:

如果不是这样,或许验证确保排序发生在NSOutlineView上。

+1

将最后一个选定节点的NSIndexPath与insertObject一起使用:atArrangedObjectIndexPath:适用于插入,但仍不会在最后一个选定项之后添加新节点_after_。我可以以某种方式计算最后一个选定节点之后的下一个索引路径,但NSIndexPath似乎没有用于下一个位置的方法(它的下一个_index_)。看来,我希望,他们是一些内置的方法,根据文档**补充:**应该做的。 – Gobot