2011-01-22 6 views
7

복잡한 객체 계층 구조에서 KVO를 이해하는 데 도움이 필요합니다. 시나리오를 설정해 보겠습니다. MyClass 객체에는 MyPerson 객체가 포함 된 변경 가능한 배열 속성이 있습니다. MyClass의 myPeople 속성에서 변경 사항을 관찰하고 싶습니다. 또한 MyPerson 개체에 포함 된 모든 속성을 관찰하고 싶습니다. 다음은 클래스 정의입니다.NSMutableArray에서 객체의 주요 값 관찰을 구현하는 방법

@interface MyClass:NSObject 
{ 
    NSMutableArray *myPeople; 
} 

@property(nonatomic, retain)NSMutableArray *myArray; 

@end 
다음

MyPerson 객체이며,

@interface MyPerson:NSObject 
{ 
    NSString *myName; 
    NSString *myLastName; 
} 

@property(nonatomic, retain)NSString *myName; 
@property(nonatomic, retain)NSString *myLastName; 

@end 

은 내가 다음과 같은 방법으로 관심의 특성을 관찰 맞습니까?

MyClass *myClass = [[MyClass alloc] init]; //myPeople is filled with myPerson objects 

MySchool *mySchool = [[MySchool alloc] init]; 

[myClass addObserver:mySchool 
     forKeyPath:@"myPeople" 
      options:NSKeyValueObservingOptionNew 
     context:NULL]; 

[myClass addObserver:mySchool 
     forKeyPath:@"myPeople.myName" 
      options:NSKeyValueObservingOptionNew 
     context:NULL]; //I am unsure about this one 

[myClass addObserver:mySchool 
     forKeyPath:@"myPeople.myLastName" 
      options:NSKeyValueObservingOptionNew 
     context:NULL]; //I am unsure about this one 

답변

7

아니요, 정확하지 않습니다. 배열에 개별적으로 추가하는 객체의 속성을 관찰해야합니다. 따라서 객체가 배열에 추가되거나 배열에서 제거 될 때마다 추가/제거 된 객체간에 관찰자를 추가/제거해야합니다.

+0

빠른 답장을 보내 주셔서 감사합니다. 배열의 객체가 사전 (NSDictionary) 인 경우 어떻게됩니까? 그 방법이 효과가 있습니까? – David

+0

아무 것도 바뀌지 않습니다. 배열 옵저버에서 NSKeyValueChangeInsertion, NSKeyValueChangeRemoval 또는 NSKeyValueChangeReplacement를 지정하여 배열 자체에 대한 변경 사항을 알릴 수는 있지만 배열 내용의 변경 사항을 자동으로 알릴 방법이 없습니다. –

+0

감사합니다. – David

관련 문제