我有一个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];
}有什么线索吗?
发布于 2009-12-30 23:16:47
首先,"items“不是NSArrayController的可观察属性。您的意思是它是数组控制器为其管理集合的类的属性吗?也就是说,它管理一个Foo数组,而Foo有一个属性"items"?
在任何情况下,您都会让这件事变得比需要的更难。为什么不直接将树控制器的内容绑定到数组控制器的selection.items路径呢?在少数情况下,这是不可能的。
https://stackoverflow.com/questions/1980641
复制相似问题