2017-02-17 4 views
0

MyObject 배열을 보유하고있는 NSArrayController (itemsController)가 있습니다. 이 컨트롤러는 NSTableView에 연결되어 있으며 여러 열이 모두 서로 다른 속성에 바인딩되어 있습니다.observeValueForKeyPath : 관찰 된 속성뿐만 아니라 모든 속성에 대해 호출됩니다.

이러한 속성 중 하나를 앱의 다른 곳에서 관찰하고 싶습니다. 콜백에서

[[self itemsController] addObserver:self forKeyPath:@"selectedObjects.someProperty" options:NSKeyValueObservingOptionNew context:nil]; 

:

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 

내가 어떤 선택의 변화 특성,하지만 난 단지 원하는 때마다 호출 얻고 호출 할 때 someProperty 선택된 개체 변경한다.

정말 아무것도 변경되지 않은 경우 어떻게 이러한 모든 다른 호출을 방지 할 수 있습니까?

@ "selection.someProperty"관찰 결과는 같습니다.

+0

나는 믿기 힘듭니다. 객체의 모든 속성을 관찰 할 방법이 없습니다. 어떻게 속성을 바꾸고 있습니까? 'keyPath'와'change' 사전은 무엇을 받고 있습니까? 명시 적으로'-will/didChangeValueForKey :'또는 이와 유사한 메소드를 호출하고 있습니까? KVC 또는 KVO 방법 (예 :'-setValue : forKey :')을 재정의하고 있습니까? 배열 컨트롤러가 필터링 또는 정렬을 수행합니까? 'automaticallyRearrangesObjects'가 활성화되어 있습니까? 그건 그렇고, 의문의 여지가 없습니다 : 당신은'selection'과 **'selectedObjects'가 아닌 바인딩을 사용해야합니다. –

답변

1

selectedObjects 또는 selection이 변경되면 알림을받습니다. someProperty이 변경되면 알림을 받으려면 선택한 개체의 someProperty을 관찰하고 선택 항목이 변경되면 관찰자를 제거하고 추가해야합니다.

관찰 클래스의 수퍼 클래스도 관찰 할 수 있습니다. 알림을 인식하려면 context 매개 변수를 사용하십시오. Best practices for context parameter in addObserver (KVO)

관련 문제