나는 Cocoa/Objective-C에서 간단한 MVC 애플리케이션을 개발 중이다. 알림 및 KVO에 이상한 문제가 있거나 오해가 있습니다.하나 대신 3 개의 알림
저는 MainMenu.xib에 AppController 객체가 있습니다. 따라서 NSImageView
의 image
속성을 등록 할 때 awakeFromNib
메서드를 구현합니다. 나는 다음과 같은 방법으로 관찰자로 self
을 추가
// options:3 equals to new/old passed values in changeDictionary
[backgroundImageView addObserver:self
forKeyPath:@"image"
options:3
context:NULL];
backgroundImageView
는 NSImageView
에 연결 AppController
의 IBOutlet
입니다.
표준 observeValueForKeyPath:ofObject:change:context
방법에서는 수신 된 알림 만 로깅합니다.
문제가 있습니다 - 값을 NSImageView
으로 변경하면 하나 대신 3 개의 알림이 표시됩니다. 이걸로 나를 도울 수 있니? 아마도 옵션이나 관찰자를 일반적으로 등록 할 때 뭔가를 간과 할 수 있습니까?
UPDATE : backgroundImageView
는 NSImageView
의 sublcass입니다 BackgroundImageView
클래스의 인스턴스입니다. 끌기 대상으로 끌어서 놓기 작업을 처리하기위한 후자의 하위 클래스를 작성했습니다. performDragOperation:
이 호출되면 (끌기의 마지막 '상태') 속성의 값이 setImage
인 값이 willChangeValueForKey
과 didChangeValueForKey
사이에서 변경됩니다.
숫자 리터럴 대신 항상 기호 상수를 사용해야합니다. 새로운 값과 이전 값을 모두 원한다면, 그 플래그의 비트 OR을 지정하십시오 :'NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld' –
변경 사전을 기록하면 어떤 출력이 나옵니까? (질문을 편집하여 출력을 포함 시키십시오.) –