3

我正在尝试让 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 的情况下做到这一点,我会全力以赴。

4

2 回答 2

2

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

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

于 2012-09-12T18:59:12.473 回答
1

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

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

于 2015-01-07T13:55:36.007 回答