代码之家  ›  专栏  ›  技术社区  ›  diederikh

nstreecontroller kvo问题

  •  0
  • diederikh  · 技术社区  · 14 年前

    我有一个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];
    }
    

    有什么线索吗?

    1 回复  |  直到 14 年前
        1
  •  0
  •   Joshua Nozzi    14 年前

    首先,“项目”不是NSarraycontroller的可观察属性。您的意思是它是数组控制器为其管理集合的类的属性吗?例如,它管理一个foo数组,foo有一个属性“items”?

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