我有一个基于视图的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
答案 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创建一个出口到控制器。