KVO:没有收到有关NSTableView的-selectedRowIndexes的通知?

时间:2012-09-12 16:34:37

标签: macos cocoa selection nstableview key-value-observing

我正在尝试让NSTableView的自定义子类观察其自己的-selectedRowIndexes属性的值,并且我无法确定如何正确接收通知。我的子类看起来像这样(使用ARC):

@implementation MyTableView

- (id)initWithCoder:(NSCoder *)aDecoder {
    if ((self = [super initWithCoder:aDecoder])) {
        [self addObserver:self forKeyPath:@"selectedRowIndexes" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:NULL];
    }
    return self;
}

- (void)dealloc {
    [self removeObserver:self forKeyPath:@"selectedRowIndexes"];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    NSLog(@"change: %@", change);
}

@end

但是,我从未看到-observeValueForKeyPath:...被调用。我错过了什么吗?

我也愿意接受更好的解决方案 - 我想要做KVO而不是依赖委托的-tableViewSelectionDidChange:方法的原因是我要同时使用selectedRowIndexes的先前值和当前值,而不仅仅是能够得到当前的选择。如果有一种方法可以在这个属性上没有KVO的情况下做到这一点,我会全力以赴。

2 个答案:

答案 0 :(得分:2)

如果您没有看到KVO通知,我会在bugreport.apple.com上打开雷达。原因很可能是它们不完全符合KVO标准。我没有测试过,但我不会感到震惊。

关于如何在没有KVO的情况下做到这一点,这是相当简单的。使用 tableView:willSelectRowAtIndexPath: tableView:shouldSelectRow:。检查当前值和要添加的值。返回YES

答案 1 :(得分:1)

我遇到了同样的问题,我找到了解决方案:

将NSTableView视图选择索引绑定到数组控制器,键选择索引