2012-04-26 12 views
5

Wydaje się, że przy użyciu accessors można uzyskać powiadomienia KVO o obiektach kolekcji, ale wydaje się, że nie działa to w przypadku właściwości childViewControllers NSArray kontrolera UIViewController. Chcę otrzymywać powiadomienia o dodaniu lub usunięciu obiektu do tej usługi. Więc próbowałem tego:KVO na tablicy UIViewController childViewControllers

[self addObserver:self forKeyPath:@"childViewControllers" options:NSKeyValueObservingOptionNew context:nil]; 

-(NSUInteger)countOfChildViewControllers 
{ 
    return self.childViewControllers.count; 
} 

Ale nie jestem pewien, czy robię to dobrze, nie otrzymuję żadnych powiadomień. Czy to, czego chcę, jest możliwe?

Odpowiedz

0

Chodzi o to, że wszystkie modyfikacje nieruchomości muszą przejść przez środki zgodne z KVO. Ma to związek ze sposobem implementacji UIViewController, czego nie można zrobić spoza tej klasy. Korzystanie z indeksowanych akcesorów kolekcji jest jednym ze sposobów, w jaki implementacja UIViewController może osiągnąć zgodność z KVO, ale są też inne. Nie wiem, czy ta nieruchomość jest zgodna z KVO; z tego, co zgłaszasz, najwyraźniej nie. Dodawanie pobierających lub nawet ustawiających w kategorii lub podklasie nie pomaga, jeśli podstawowa implementacja ich nie używa.