2010-12-22 5 views
15

사전의 특정 키를 관찰 할 수 있습니까? 그렇다면 어떻게해야합니까?사전의 키/항목을 관찰하는 코코아 키 값

+0

당신은 어떤 변화를 모니터링 뜻 "관찰"? –

+0

+1이 정말 유용 할 것이기 때문에 –

+0

시도해 보셨습니까? 그렇게하기 위해 약 2 분이 걸렸습니다 ... –

답변

19

예 (비록 NSMutableDictionary을 관찰하는 것이 합리적 임).

@interface Foo : NSObject @end 
@implementation Foo 

- (void) observeValueForKeyPath:(NSString *)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; 
} 

로그 :으로

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; 
} 
+4

매우 중요 : * "NSMutableDictionary"*를 관찰하는 것이 의미가 있지만. 새로운 NSDictionary를 생성하여 NSDictionary의 항목을 "변경"하면 이전 NSDictionary의 객체에서 KVO가 손실됩니다. – cksubs