Abhängige Schlüssel in einer Zu-Viele-Beziehung beobachten

8

Ich habe eine Core Data-Entität, "bid", die eine Beziehung zu vielen "items" hat, "itemLink" genannt.

in IB, ich habe ein Textfeld, das an "total" gebunden ist, und das funktioniert fast.

In "bid.m" habe ich:

%Vor%

Ich habe auch:

%Vor%

Beim Hinzufügen oder Löschen eines Elements wird "total" wie erwartet aktualisiert. Wenn Sie jedoch einen "Gegenstand" innerhalb des itemLink-Satzes ändern, wird der Gesamtwert nicht aktualisiert. Wie erhalten Sie KVO zu sehen, wenn ein verwandtes Objekt in der verknüpften NSSet geändert hat?

Danke

    
AppCrafter 01.06.2011, 01:44
quelle

2 Antworten

7

Ihr Problem hängt damit zusammen, dass keyPathsForValuesAffectingTotal nur den keyPath "itemLink" erwähnt.

Da dies der Pfad einer Zu-Viele-Beziehung ist, teilen Sie Ihrem Gebotsobjekt effektiv mit, einen Satz auf Änderungen zu beobachten. Alles, was ein Set tut, ist zu verwalten, ob Objekte Mitglieder davon sind oder nicht. Das erklärt, warum Sie Updates erhalten, wenn Elemente von "itemLink" hinzugefügt oder entfernt werden, aber nur das.

Sie sind nicht nur daran interessiert, welche Artikel Mitglieder des Sets sind, sondern Sie interessieren sich auch für die (veränderlichen) Eigenschaften dieser Mitglieder - Preis in diesem Fall. Zusätzlich zu dem oben Gesagten möchten Sie, dass jedes Mitglied von "itemLink" alle Beobachter über den "Gesamt" -Schlüssel des relevanten Gebotsobjekts informiert, dass sich der "Preis" geändert hat, wenn er sich ändert.

Leider ist es nicht so einfach, "itemLink.price" als abhängigen Schlüsselpfad in Ihrer Bid-Klasse hinzuzufügen, da KVO Ihnen nicht erlaubt, "durch" zu viele Beziehungen zu beobachten.

Wenn Sie eine NSManagedObject-Unterklasse für Instanzen Ihrer Element-Entität verwenden, können Sie diese Funktionalität manuell hinzufügen. Überschreibe + automaticallyNotifiesObserversForKey: in deiner Item-Klasse, um Cocoa mitzuteilen, dass du KVO-Benachrichtigungen manuell für den "price" -Schlüssel verwalten willst, und implementiere dann deine eigene setPrice: -Methode, die die entsprechende Benachrichtigung sendet. Etwas wie das:

%Vor%     
Chris Devereux 07.06.2011, 21:48
quelle
1

Ich habe Code geschrieben, um abhängige Schlüssel in vielen Beziehungen zu unterstützen.

Ссылка

Es unterstützt auch das Caching von berechneten Werten.

    
cocoafan 30.01.2013 13:19
quelle