我正在尝试让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
。