NSOutlineView的SelectedRow始终返回-1

时间:2015-02-04 21:32:47

标签: cocoa interface-builder nstableview selecteditem nsoutlineview

我有一个基于视图的NSOutlineView,并且在课堂上有一个选择更改事件:

- (void)outlineViewSelectionDidChange:(NSNotification *)notification
{
    NSLog(@"Selected Row inside:%ld",[self selectedRow]);
}

这是我创建NSOutlineView的方式:

ovc = [[OutlineViewController alloc] init];
[myOutlineView setDelegate:(id<NSOutlineViewDelegate>)ovc];
[myOutlineView setDataSource:(id<NSOutlineViewDataSource>)ovc];

MyOutlineView在IB中创建 每次我点击一行时,事件都会被触发,但结果总是-1。

NSLog(@"Item 0:%@",[self viewAtColumn:1 row:0 makeIfNecessary:YES]);

始终返回NULL。

我应该做些具体的事吗?谢谢。

===编辑===
我发布了显示问题的简化代码:http://www.petits-suisses.ch/OutlineView.zip

2 个答案:

答案 0 :(得分:2)

而不是检查self对象的selectedRow,它只是在AppController中初始化的对象,这是一个错误的实例。您需要检查通知对象,如下所示。

NSLog(@"Selected Row:%ld",[[notification object] selectedRow]);

clickedRow在目标的动作实现中也很有意义。因此,如果在Action或DoubleAction方法中进行了检查,则clickedRow会给出正确的值。

答案 1 :(得分:1)

您的NSOutlineView“Controller”类实际上是NSOutlineView的子类,这与XIB文件中的NSOutLineView不同。如果您查看正在发送的通知对象,它是NSOutlineView的实例,而不是“OutlineViewController”,因此您在不正确的实例上调用selectedRow。

此代码应放在NSViewController的子类中,而不是NSOutlineView。然后从outlineView创建一个出口到控制器。