NSTableView 绑定和 tableViewSelectionDidChange

NSTableView bindings and tableViewSelectionDidChange

我有一个带有绑定的 NSTableView 设置,我已经将委托+数据源设置为文件所有者。 table 视图的元素未触发委托方法。如果我在元素外部单击,即 table 视图背景 - selectionShouldChangeInTableView 被调用。

我不明白为什么不调用 tableViewSelectionDidChange。说真的,为什么调试这么难?

-(void)tableViewSelectionDidChange:(NSNotification *)notification {
    NSLog(@"%s", __PRETTY_FUNCTION__);
    NSTableView *tableView = [notification object];
    [[NSNotificationCenter defaultCenter] postNotificationName:TABLE_SELECTION object:tableView];

}

- (BOOL)selectionShouldChangeInTableView:(NSTableView *)tableView {
    NSLog(@"Hello there");
    return YES;
}

如果您对所选行感兴趣,可以使用委托方法

- (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(NSInteger)rowIndex

但是 更好的方法是在选择数组控制器本身时添加一个观察者,您的 table 绑定到

的数组控制器
[myArrayController addObserver:self forKeyPath:@"selection" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];

并使用以下方法监听变化:

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary<NSString *,
                                        id> *)change
                       context:(void *)context

并且不要忘记在析构函数方法中删除观察者

-(void)dealloc 
{
    [super dealloc];
    [myArrayController removeObserver:self];
}