2011-01-22 11 views
7

Potrzebuję pomocy w zrozumieniu KVO na złożonej hierarchii obiektów. Pozwól mi ustawić scenariusz. Obiekt MyClass ma zmienną właściwość tablicy, która zawiera obiekty MyPerson. Chcę obserwować zmiany we właściwości myPeople w MyClass. Ponadto chciałbym również obserwować wszystkie właściwości zawarte w obiekcie MyPerson. Oto definicje klas.Jak zaimplementować obserwowanie wartości kluczy w obiekcie NSMutableArray

@interface MyClass:NSObject 
{ 
    NSMutableArray *myPeople; 
} 

@property(nonatomic, retain)NSMutableArray *myArray; 

@end 

Oto przedmiot MyPerson,

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

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

@end 

Czy to prawidłowe obserwować właściwości, które mnie interesuje w następujący sposób?

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 

Odpowiedz

7

Nie, to nie jest poprawne. Będziesz musiał obserwować właściwości każdego obiektu dodawanego do tablicy osobno. Kiedykolwiek obiekt zostanie dodany lub usunięty z tablicy, musisz dodać/usunąć swojego obserwatora do/z dodanych/usuniętych obiektów.

+0

Dzięki za szybką odpowiedź. Co jeśli obiektami w tablicy były słowniki (NSDictionary). Czy ta metoda zadziała? – David

+0

Nic nie zmieniłoby. Możesz określić 'NSKeyValueChangeInsertion',' NSKeyValueChangeRemoval' lub 'NSKeyValueChangeReplacement' na swoim tablecie, aby otrzymywać powiadomienia o zmianach w samej tablicy, ale nie ma możliwości automatycznego powiadomienia o zmianach w zawartości tablicy. –

+0

Dzięki, rozumiem teraz. – David

Powiązane problemy