Valeur key Cocoa observant une key / input dans un dictionary

Est-il possible d'observer une key spécifique dans un dictionary? Si oui, comment puis-je le faire?

Oui (bien qu'il soit logique d'observer un NSMutableDictionary ).

 @interface Foo : NSObject @end @implementation Foo - (void) observeValueForKeyPath:(NSSsortingng *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { NSLog(@"observing: -[%@ %@]", object, keyPath); NSLog(@"change: %@", change); } @end int main (int argc, const char * argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; Foo * f = [[Foo alloc] init]; NSMutableDictionary * d = [NSMutableDictionary dictionary]; [d addObserver:f forKeyPath:@"foo" options:0 context:NULL]; [d setObject:@"bar" forKey:@"foo"]; [d removeObjectForKey:@"foo"]; [d removeObserver:f forKeyPath:@"foo"]; [f release]; [pool drain]; return 0; } 

Journaux

 2010-12-21 17:39:53.758 EmptyFoundation[94589:a0f] observing: -[{ foo = bar; } foo] 2010-12-21 17:39:53.764 EmptyFoundation[94589:a0f] change: { kind = 1; } 2010-12-21 17:39:53.765 EmptyFoundation[94589:a0f] observing: -[{ } foo] 2010-12-21 17:39:53.765 EmptyFoundation[94589:a0f] change: { kind = 1; }