Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
I'm getting the following in my output window when running a project:
An -observeValueForKeyPath:ofObject:change:context: message was received but not handled.
Key path: connection.messageQueue
Observed object: <Client: 0x10011ddb0>
You get the idea. The thing is, I have no idea why this is happening. It appears everything is working fine, however. Here's the code causing the problem:
-(id) initWithIdentifier:(NSString*)ident andClient:(Client*)chatClient {
if(![super initWithNibName:@"ChatView" bundle:nil]) {
return nil;
[self setTitle: ident];
client = chatClient;
[self setIdentifier:ident];
inContext = false;
[client addObserver:self forKeyPath:@"connection.messageQueue" options:NSKeyValueObservingOptionNew context:NULL];
return self;
-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
NSAttributedString* rar = [[NSAttributedString alloc] initWithString:@"test"];
[[textView textStorage] appendAttributedString:rar];
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
I thought I'd show all the code relating to this. The class only has a few methods so this is all you need to see. I'm not even using the change, I'm just plucking on "test" when the KVO event gets fired.
The stack trace gets pretty big very quickly as messages are coming in all the time. Yet it seems everything is working okay.
Any clues?
–
–
–
I have got the same problem: An -observeValueForKeyPath:ofObject:change:context: message was received but not handled. I have googled here, then I figured it out by myself, so maybe it helps someone.
For me, the problem was: the object registered as the observer (if you have ... addObserver:self ... then that object is self) has been released at the moment when the value was changed. But the observer was still registered, so -observeValueForKeyPath:ofObject:change:context:
message was received by the nil observer.
–
–
Make sure you only call super on the stuff you're not interested in.
class Layer: CALayer {
private let key1 = "transport"
private let key2 = "position"
override init() {
super.init()
addObserver(self, forKeyPath: key1, options: [], context: nil)
addObserver(self, forKeyPath: key2, options: [], context: nil)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == key1 || keyPath == key2 {
} else {
super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
deinit {
removeObserver(self, forKeyPath: key1)
removeObserver(self, forKeyPath: key2)
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.