我正在尝试让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的情况下做到这一点,我将不知所措。

最佳答案

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

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

07-25 22:58
查看更多