【发布时间】:2012-09-12 16:34:37
【问题描述】:
我正在尝试让 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,我会全力以赴。
【问题讨论】:
标签: macos cocoa selection nstableview key-value-observing