0

我有一个 NSTreeController,它的数组绑定到 NSArrayController 子类的“项目”(自定义)属性。由于树控制器未绑定到 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];
}

有什么线索吗?

4

1 回答 1

0

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

在任何情况下,你都让这变得比它需要的更难。为什么不直接将树控制器的内容绑定到数组控制器的 selection.items 路径?在少数情况下这是不可能的。

于 2009-12-30T15:16:46.503 回答