Основные данные: отправка уведомлений KVO для переходных, производных свойств

у меня естьParent объект с пользовательским классом, который имеет временное и производное (только для чтения) свойство, называемоеDerivedProperty.

ЗначениеDerivedProperty зависит от стоимостиParent.IndependentProperty1 и так всякий раз, когдаIndependentProperty1 изменения, стоимостьDerivedProperty изменится. Тем не мение,Parent имеет отношение ко многимChild (называетсяchildren) а такжеDerivedProperty также зависит от стоимостиIndependentProperty2 во всехParent«sChild объекты.

Так что всякий раз, когдаIndependentProperty1 изParent или жеIndependentProperty2 любого изChild изменения объектов, я хотел бы уведомить любых наблюдателей, чтоDerivedProperty также изменился.

Я пришел к следующему коду. Единственная проблема заключается в том, что уведомления KVO не отправляются дляDerivedProperty так как если я попытаюсь сделать это вobjectContextDidChange: тогда код окажется в цикле.

- (void) awakeFromInsert
{
    [super awakeFromInsert];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(objectContextDidChange:) name:NSManagedObjectContextObjectsDidChangeNotification object:self.managedObjectContext];
}


- (void) awakeFromFetch
{
    [super awakeFromFetch];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(objectContextDidChange:) name:NSManagedObjectContextObjectsDidChangeNotification object:self.managedObjectContext];
}

- (void) objectContextDidChange: (NSNotification *) notification
{
    NSSet *updatedObjects = [[notification userInfo] objectForKey:NSUpdatedObjectsKey];

    if ([updatedObjects containsObject:self] || [updatedObjects intersectsSet:self.children])
    {
        //clear caches
        _derivedProperty  = nil;
    }
}

- (void) didTurnIntoFault
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (NSString *) DerivedProperty
{
    if (_derivedProperty == nil)
    {
        _derivedProperty  = [self someExpensiveCalculation];
    }
    return _derivedProperty  ;
}

Я уверен, что мне нужно полностью пересмотреть мой подход здесь. Я пытался использовать КВО, чтобы наблюдатьIndependentProperty1 а такжеIndependentProperty2 отношения ко многим, но я просто не могу понять, как это работает правильно. Если производное свойство не зависело от отношения ко многим, то я уверен, что я мог бы просто использоватьkeyPathsForValuesAffectingValueForKey: но, конечно, это не сработает во многих отношениях.

Как получить уведомления KVO, работающие с временным производным свойством Core Data, которое зависит от отношения ко многим?

Ответы на вопрос(1)

Ваш ответ на вопрос