Kerndaten: Versenden von KVO-Benachrichtigungen für vorübergehende, abgeleitete Eigenschaften

ich habeParent Entität mit einer benutzerdefinierten Klasse, die eine vorübergehende und abgeleitete (schreibgeschützte) Eigenschaft namens hatDerivedProperty.

Der Wert vonDerivedProperty ist abhängig vom Wert vonParent.IndependentProperty1 und so wann immerIndependentProperty1 ändert sich der Wert vonDerivedProperty wird sich verändern. Jedoch,Parent hat eine zu viele Beziehung zuChild (namenschildren) undDerivedProperty ist auch abhängig vom Wert vonIndependentProperty2 in allenParent'sChild Objekte.

Also wann immerIndependentProperty1 vonParent oderIndependentProperty2 von einem derChild gegenstandsänderungen möchte ich keine beobachter darauf hinweisenDerivedProperty hat sich auch geändert.

Ich bin bisher zu folgendem Code gekommen. Das einzige Problem ist, dass für keine KVO-Benachrichtigungen ausgegeben werdenDerivedProperty denn wenn ich das versuche inobjectContextDidChange: dann endet der Code in einer Schleife.

- (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  ;
}

Ich bin mir sicher, dass ich meine Herangehensweise hier völlig überdenken muss. Ich habe versucht, mit KVO zu beobachtenIndependentProperty1 undIndependentProperty2 von der Beziehung zu vielen, aber ich kann einfach nicht scheinen, es richtig zum Laufen zu bringen. Wenn die abgeleitete Eigenschaft nicht von einer zu vielen Beziehung abhängig wäre, könnte ich sie sicher einfach verwendenkeyPathsForValuesAffectingValueForKey: Aber in einer Beziehung mit vielen Menschen funktioniert das natürlich nicht.

Wie erhalte ich KVO-Benachrichtigungen, die mit einer transienten, abgeleiteten Core Data-Eigenschaft funktionieren, die von einer Zu-Viele-Beziehung abhängig ist?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage