我有一个NSTreeController绑定到NSOutlineView(没有核心数据)。可可的参考:NSTreeController添加:方法不添加“当前选择后”
地址:
当前选择后添加一个对象接收。
- (void)add:(id)sender
什么绊倒我出去的是,当添加方法被调用它把新的项目在列表的末尾,选定项目后不。插入方法似乎按预期工作(在选择之前添加的项目)。难道我做错了什么?如何在选定的项目之后插入新节点,而不是在列表的末尾?
我有一个NSTreeController绑定到NSOutlineView(没有核心数据)。可可的参考:NSTreeController添加:方法不添加“当前选择后”
地址:
当前选择后添加一个对象接收。
- (void)add:(id)sender
什么绊倒我出去的是,当添加方法被调用它把新的项目在列表的末尾,选定项目后不。插入方法似乎按预期工作(在选择之前添加的项目)。难道我做错了什么?如何在选定的项目之后插入新节点,而不是在列表的末尾?
这是我最终做的,我实现了一个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
你可能想要做的是致电insertObject:atArrangedObjectIndexPath:
。
创建一个IBAction(即:(IBAction)addAfterSelection:(id)sender
)并让它实例化您的对象,将所选的indexPath指定为insertObject:atArrangedObjectIndexPath:
。
如果不是这样,或许验证确保排序发生在NSOutlineView
上。
将最后一个选定节点的NSIndexPath与insertObject一起使用:atArrangedObjectIndexPath:适用于插入,但仍不会在最后一个选定项之后添加新节点_after_。我可以以某种方式计算最后一个选定节点之后的下一个索引路径,但NSIndexPath似乎没有用于下一个位置的方法(它的下一个_index_)。看来,我希望,他们是一些内置的方法,根据文档**补充:**应该做的。 – Gobot
也许这是我做错了,但似乎NSTreeController和NSTreeNodes似乎是非常适合的点的错误。我尝试过获取父节点(这是本例中的根节点)并通过** mutableChildNodes:**创建一个NSMutableArray,然后向该数组添加一个节点。当我这样做时,我得到一个异常**“ - [NSTreeNode _setupObserving]:无法识别的选择器发送到实例0x20004f640 ”**,这对我来说意味着NSTreeNode不符合KVO,即使文档声明它们是。 – Gobot
您在Interface Builder中为NSTreeController的KVO设置了哪些键,这听起来更像是绑定问题,而不是bug。 – LearnCocos2D