【问题标题】:NSTreeController KVO issueNSTreeController KVO 问题
【发布时间】:2009-12-30 15:09:34
【问题描述】:

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

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

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

这应该足够了。类方法被调用,但似乎没有任何效果。

如果我为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];
}

有什么线索吗?

【问题讨论】:

    标签: cocoa key-value-observing nstreecontroller


    【解决方案1】:

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

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

    【讨论】:

    • items 是我的 NSArrayController 子类的自定义属性。它也是 NSArrayController 管理的类的属性。我不能直接绑定,因为我需要做一些数组控制器管理的类无法处理的额外逻辑。
    • 我建议发布您的自定义代码的相关部分。由于缺少细节,因此需要过多猜测。
    猜你喜欢
    • 2011-10-27
    • 1970-01-01
    • 2011-08-08
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多