Ich habe also zwei Objekte, Invoice und InvoiceLineItem. InvoiceLineItem hat eine Eigenschaft namens cost
und wird basierend auf anderen Eigenschaften dynamisch erstellt. Um mit den KVO/Bindings zu helfen benutze ich:Einrichten von KVO für berechnete Werte, basierend auf berechneten Werten
+ (NSSet *)keyPathsForValuesAffectingCost {
return [NSSet setWithObjects:@"lineItemType", @"serviceCost", @"hourlyRate", @"timeInSeconds", @"productCost", @"quantityOfProduct", @"mileageCost", @"milesTraveled", nil];
}
Das funktioniert super. Wenn ich eine Eigenschaft wie serivceCost bearbeite, werden die Hauptkosten in der Tabellenansicht aktualisiert.
Im Invoice-Objekt habe ich ein NSMutableArray von InvoiceLineItems. Rechnung hat eine ähnliche Eigenschaft mit dem Namen totalCost
. Es wird durch Iteration über die Werbebuchungen berechnet, und solange die Werbebuchung nicht als gelöscht markiert ist (was ich aus Gründen der Synchronisierung tue), summiert sie die Kosten und erstellt die Gesamtkosten.
Jetzt meine Frage/Problem. Wie richte ich TotalCost für Invoice so ein, dass es mit KVO/Bindings funktioniert, wenn sich die Kosten einer Werbebuchung geändert haben?
Ich habe versucht, die Einrichtung:
+ (NSSet *)keyPathsForValuesAffectingTotalCost {
return [NSSet setWithObjects:@"lineItems.cost", nil];
}
aber es funktioniert nicht. Ich erhalte einen Fehler in der Konsole: [<NSCFArray 0x1499ff40> addObserver:forKeyPath:options:context:] is not supported. Key path: cost
ich ziemlich nah dran an dieser Art der Implementierung selbst war, aber es ist gut, es von jemand anderem kommen zu hören. Frage aber, das Stapeln von will/didChange ... warum rufst du nicht einfach didChange an? – zorn
Ich denke, es sollte funktionieren, wenn die zugrunde liegenden Objekte es korrekt implementieren. Zum Beispiel zeigt die Core Data FAQ so etwas wie: http://developer.apple.com/documentation/Cocoa/Conceptual/CoreData/Articles/cdFAQ.html#//apple_ref/doc/uid/TP40001802-SW3 –
Mit einigen frühen Tests funktioniert das. Ich hatte auch schon die meisten Beobachtungsdaten an Ort und Stelle (um Unterstützung rückgängig zu machen). Danke noch einmal. – zorn