NSOutlineView 的 SelectedRow 总是 returns -1

SelectedRow of NSOutlineView always returns -1

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

- (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]);

总是returns NULL。

有什么我应该做的具体事情吗?谢谢。

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

您的 NSOutlineView "Controller" class 实际上是 NSOutlineView 的子class,这与您的 XIB 文件中的 NSOutLineView 不同。如果您查看正在发送的通知对象,它是 NSOutlineView 的一个实例,而不是 "OutlineViewController",因此您在错误的实例上调用了 selectedRow。

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

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

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

此外,clickedRow 在目标执行操作中有意义。因此,如果在 Action 或 DoubleAction 方法中选中,clickedRow 会给出正确的值。