Hallo alle Jahre StackOverflow lesen, jetzt habe ich mich entschieden, beizutreten. Ich habe Mühe, um dies zu lösen:KVO addObserver zu CoreData-Objekt Eins-zu-viele-Beziehung
Ich habe eine "Depot" -Entität, die zwei zu viele Beziehungen "Personen" und "Trucks" hat. Ich möchte beobachten, wenn es bei einem "Depot" -Objekt Änderungen (einfügen, entfernen) in einer der Beziehungen gibt (und verstehen, in welcher).
i dieser Zeit tue:
[mydepot addObserver:self forKeyPath:@"Trucks" options:NSKeyValueObservingOptionNew context:nil];
und
[mydepot addObserver:self forKeyPath:@"Persons" options:NSKeyValueObservingOptionNew context:nil];
aber jedes Mal etwas in einer der beiden verwandten Sammlungen ändert, wird observeValueForKeyPath
zweimal (einmal für jede genannt Schlüsselpfad).
Mache ich es falsch? Wenn man auf "change" dict schaut, (beobachtet auch mit OptionOld) zeigt es keine unerwarteten Änderungen an (wenn ich Personen wechsle, wird Trucks nicht geändert), aber die Benachrichtigung wird immer noch erhöht.
Danke, Pietro
edit: es scheint, dass beide Male die „Veränderung“ dict die gesamte Beziehung in der „neuen“ Feld enthält. (offensichtlich einmal Personen und einmal Trucks)
edit2: wie es passiert, sogar bserving einfache Eigenschaften, könnte es mit dem managedctx speichern Vorgang verbunden sein? als ob, wenn Sie speichern, wird das gesamte Objekt als geändert betrachtet.
+1 Zustimmen. Denken Sie daran, die vorhandene Sammlung von Werten zu ändern, anstatt die gesamte Sammlung durch eine andere Sammlung zu ersetzen. – Caleb
Danke, yeah aber Depot ist eine CoreData NSManagedObject-Unterklasse und sollte daher bereits KVO-kompatible Accessoren implementieren. Und ich tue das, was du sagst. Aus Gründen der Fakten füge ich der Beziehung nur eine neue LKW-Entität hinzu und ersetze niemals das gesamte Set (Beziehung). Deshalb kann ich es nicht verstehen. Als ob ich für zwei Schlüsselpfade beobachten würde, zum Beispiel "Trucks" und "sqmeters" (das ist keine Beziehung), wenn "sqmeters" geändert wird, werden zwei Benachrichtigungen ausgelöst (auch eine für die "LKWs" kpath) – Peterdeka
Schlüsselpfade können davon abhängen einander ... vielleicht ist das was passiert? Sonst müssen Sie woanders suchen – nielsbot