Hallo,
ich feile wieder am KVO meines Views. Da waren doch noch einige Bugs drin... manchmal hat mein verwendeter Algorithmus Observer entfernt wo keine waren.
Den Fehler habe ich auch schnell gefunden - nur mit der Lösung nicht so wirklich.
Ich observiere ja n-Objekte (to-many), die sich alle von einem NSArrayController verwalten lassen (CoreData eben). Mein Gedanke war nun einfach die arrangedObjects zu observieren und mit den Options NSKeyValueChangeNewKey/Old an die Information über Änderungen informiert zu werden. Denkste. Musste feststellen, dass beim NSArrayController diese Optionen noch nicht implementiert wurden oder es ein bekannter Bug ist.
Die Lösung des Problems steht ja am Ende von Toms Artikel.
macentwicklerwelt.net/doku.php?id=wiki:key-value-observing
Stutzig macht mich der letzte Punkt:
"Kopiere das neue Array in das alte."
Ist hier mit "Kopiere" ein Kopieren mit copy gemeint oder eine einfache Zuweisung? Falls eine Kopie gemeint ist wirds schwer, sobald man mit NSManagedObjects arbeitet, da diese ja kein NSCopying implementieren. Too bad.
Falls mit Kopieren eine einfache Zuweisung gemeint ist habe ich ein anderes Verständnisproblem:
Punkt 2: "Entferne alle Elemente, die bereits im alten Array bekannt waren."
Punkt 4: "Hole altes Array".
Wie soll ich Punkt 2 erfüllen ohne zunächst Punkt 4 erfüllt zu haben? Ohne altes Array kann ich ja schlcht alle Elemente, die bereits im alten bekannt waren entfernen.
Danke.
Edit: Zur Konkretisierung - hier ein Ausschnitt meiner:
Implementierung, die natürlich falsch ist... dient nur der Vorbeugung von Misverständnissen:
Alles anzeigen
ich feile wieder am KVO meines Views. Da waren doch noch einige Bugs drin... manchmal hat mein verwendeter Algorithmus Observer entfernt wo keine waren.
Den Fehler habe ich auch schnell gefunden - nur mit der Lösung nicht so wirklich.
Ich observiere ja n-Objekte (to-many), die sich alle von einem NSArrayController verwalten lassen (CoreData eben). Mein Gedanke war nun einfach die arrangedObjects zu observieren und mit den Options NSKeyValueChangeNewKey/Old an die Information über Änderungen informiert zu werden. Denkste. Musste feststellen, dass beim NSArrayController diese Optionen noch nicht implementiert wurden oder es ein bekannter Bug ist.
Die Lösung des Problems steht ja am Ende von Toms Artikel.
macentwicklerwelt.net/doku.php?id=wiki:key-value-observing
Stutzig macht mich der letzte Punkt:
"Kopiere das neue Array in das alte."
Ist hier mit "Kopiere" ein Kopieren mit copy gemeint oder eine einfache Zuweisung? Falls eine Kopie gemeint ist wirds schwer, sobald man mit NSManagedObjects arbeitet, da diese ja kein NSCopying implementieren. Too bad.
Falls mit Kopieren eine einfache Zuweisung gemeint ist habe ich ein anderes Verständnisproblem:
Punkt 2: "Entferne alle Elemente, die bereits im alten Array bekannt waren."
Punkt 4: "Hole altes Array".
Wie soll ich Punkt 2 erfüllen ohne zunächst Punkt 4 erfüllt zu haben? Ohne altes Array kann ich ja schlcht alle Elemente, die bereits im alten bekannt waren entfernen.
Danke.

Edit: Zur Konkretisierung - hier ein Ausschnitt meiner:
Implementierung, die natürlich falsch ist... dient nur der Vorbeugung von Misverständnissen:
Quellcode
- // Hole neues Array.
- NSMutableSet *neuesSet = [newDeck mutableSetValueForKey:@"cards"];
- // Hole altes Array
- NSMutableSet *altesSet = [self oldCards];
- // Entferne alle Elemente, die bereits im alten Array bekannt waren.
- [neuesSet minusSet:altesSet];
- // Observiere den Rest
- [self _addAsObserver:[neuesSet allObjects]];
- // Hole das alte array (hab ich schon)
- // Entferne alle Elemente, die im neuen Array enthalten sind.
- [altesSet minusSet:neuesSet];
- // Lösche Observierungen des Restes.
- [self _removeAsObserver:[altesSet allObjects]];
- // Kopiere das neue Array in das alte.
- [self setOldCards:neuesSet];
Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.
Objective-C und Cocoa Band 2: Fortgeschrittene
Cocoa/Objective-C Seminare von [co coa:ding].
Objective-C und Cocoa Band 2: Fortgeschrittene
Cocoa/Objective-C Seminare von [co coa:ding].