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 会给出正确的值。
我有一个基于视图的 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 会给出正确的值。