我正在尝试让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的情况下做到这一点,我会全力以赴。
答案 0 :(得分:2)
如果您没有看到KVO通知,我会在bugreport.apple.com上打开雷达。原因很可能是它们不完全符合KVO标准。我没有测试过,但我不会感到震惊。
关于如何在没有KVO的情况下做到这一点,这是相当简单的。使用 tableView:willSelectRowAtIndexPath:
tableView:shouldSelectRow:
。检查当前值和要添加的值。返回YES
。
答案 1 :(得分:1)
我遇到了同样的问题,我找到了解决方案:
将NSTableView视图选择索引绑定到数组控制器,键选择索引