В основных данных: почему представление контроллера массива не замечает изменений в object.otherobject.property, а только в object.property?

У меня есть nsarraycontroller * ctrlr1, извлекающий свои данные из основного объекта данных obj1, который имеет отношение один к одному к obj2, также полученному nsarraycontroller * ctrlr2 в ctrlr. Я установил через IB предикат выборки, подобный этому

inactive == 0 && obj2.active ==1

У меня есть представление со связанными свойствами для атрибутов obj1, и если я щелкну флажок, привязанный к неактивному, мое представление nscollection правильно затухает obj1 и его представление, НО Если в другом представлении nscollection я изменю атрибут obj2 active на 0, первое представление nscollection не обновляется мгновенно, даже если я насильно использую метод fetch:, что это может быть? fetch отлично работает при первой выборке (запуск приложения)


person G3z    schedule 10.11.2010    source источник


Ответы (1)


NSArrayController не знает, что ему нужно наблюдать потенциально сколь угодно глубокое дерево объектов, и просто наблюдает за свойствами объектов в наблюдаемом массиве (и самом массиве). Таким образом, вам нужно будет программно предоставить уведомление об изменении, чтобы «глубокое» изменение всплыло в контроллере массива, или явно указать контроллеру отслеживать эти пути глубокого ключа.

person Community    schedule 10.11.2010
comment
поэтому я должен опубликовать [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(???) name:NSManagedObjectContextObjectsDidChangeNotification object:managedObjectContext]; в nsarraycontroller? как я могу использовать другой метод? спасибо - person G3z; 10.11.2010