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 に答える