NSTreeController KVO问题

时间:2009-12-30 15:09:35

标签: cocoa key-value-observing nstreecontroller

我有一个NSTreeController,该数组绑定到NSArrayController子类的“items”(自定义)属性。 由于树控制器没有绑定到NSArrayController的选择,我需要确保让树控制器知道在选择阵列控制器更改后必须获取项。

我在NSArrayController的子类中完成了以下操作:

+ (NSSet *)keyPathsForValuesAffectingItems
{
    return [NSSet setWithObjects:@"selectedObjects",nil];
}

哪个应该足够AFAIK。调用类方法但似乎没有任何效果。

如果我为selectedObjects实现观察者,它可以正常工作:

- (void)awakeFromNib;
{
    [self addObserver:self forKeyPath:@"selectedObjects" options:0 context:nil];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(NSObjectController *)context;
{
    if ([keyPath isEqual:@"selectedObjects"]) {
        [self willChangeValueForKey:@"items"];
        [self didChangeValueForKey:@"items"];
    }

    [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}

有任何线索吗?

1 个答案:

答案 0 :(得分:0)

首先,“items”不是NSArrayController的可观察属性。你的意思是它是你的数组控制器管理集合的类的属性?即,它管理一个Foo和Foo的数组有一个属性“items”?

无论如何,你所做的比这更难。为什么不继续将树控制器的内容绑定到数组控制器的selection.items路径?很少有情况下这是不可能的。