Как реализовать наблюдение значения ключа объектов в NSMutableArray - PullRequest
7 голосов
/ 22 января 2011

Мне нужна помощь, чтобы понять KVO в сложной иерархии объектов.Позвольте мне установить сценарий.Объект MyClass имеет свойство изменяемого массива, которое содержит объекты MyPerson.Я хочу наблюдать изменения в свойстве myPeople MyClass.Кроме того, я хотел бы наблюдать за всеми свойствами, содержащимися в объекте MyPerson.Вот определения классов.

@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

1 Ответ

7 голосов
/ 22 января 2011

Нет, это не правильно.Вы должны будете наблюдать свойства для любого объекта, который вы добавляете в массив отдельно.Таким образом, всякий раз, когда объект добавляется или удаляется из массива, вам придется добавлять / удалять наблюдателя в / из добавленных / удаленных объектов.

...