NSArrayControllerサブクラスの「items」(カスタム)プロパティに配列がバインドされているNSTreeControllerがあります。ツリーコントローラーは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];
}
どんな手掛かり?