NS 配列의 하위 항목의 "항목"(사용자 지정) 속성에 바인딩 된 NSTreeController가 있습니다. 트리 컨트롤러가 NSArrayController 선택에 바인딩되지 않았으므로 어레이 컨트롤러가 변경된 후에 항목을 가져와야한다는 것을 트리 컨트롤러에 알려야합니다.NSTreeController KVO 발행
내가 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];
}
어떤 단서?
items는 NSArrayController 하위 클래스의 사용자 지정 속성입니다. 또한 NSArrayController가 관리하는 클래스의 속성이기도합니다. 배열 컨트롤러가 관리하는 클래스에서 처리 할 수없는 몇 가지 추가 논리를 수행해야하므로 직접 바인딩 할 수 없습니다. – diederikh
사용자 지정 코드의 관련 부분을 게시하는 것이 좋습니다. 세부 정보가 누락되었으므로 너무 많은 추측이 필요합니다. –