Aha, der Autor persönlich! Vielen Dank für die Antwort!
Zitat von
Jens Schumann:
Hallo,
so wie Du es vor hast wird es nicht funktionieren. Es sieht so aus, als ob Du nur eine Referenz auf das andere TCollectionItem speicherst.
Genau. Das ist auch so gewollt, denn es soll bei dem Programm von verschiedenen Stellen aus dasselbe (nicht nur das gleiche
) Object manipuliert werden.
Zitat:
Wenn Du das speicherst wird die wahrscheinlich nur die Referenz gespeichert. Wenn die Collection wieder geladen wird, wird wahrscheinlich auch nur die Referenz wiederhergestellt. Was jetzt aber im Arbeitsspeicher an der Stelle liegt ist völlig ungewiss.
Na ja, meine Experimente haben ergeben, daß der Speicheralgorithmus über die Referenz auf das dadurch referenzierte Object noch mal zugreift und dessen publishe properties noch ein weiteres mal speichert.
Zitat:
Du musst eine Kopie des TCollectionItem speichern. Dann klappt es.
Das hilft mir leider nicht, s.o.
Überlegung: Wenn man so was programmieren wollte müßte man doch eigentlich folgendes machen:
1) Alle Objekte und deren published properties wie gehabt speichern, mit Ausnahme der properties, die Referenzen auf Objekte darstellen. Jedes Objekt erhält eine eindeutige (innerhalb der gesamten Datei eindeutige) ID.
2) Wenn der Speicheralgorithmus auf eine Referenz trifft:
a) Prüfen, ob das Referenzierte Objekt schon gespeichert wurde.
JA-> dessen ID als Referenz Speichern
NEIN -> zunächst das Objekt speichern, dann wie bei JA.
(Ladevorgang entsprechend)
usw. Das sollte prinzipiell funktionieren, außer bei zirkulären Referenzen.
Aber die Umsetzung dürfte nicht so einfach sein, oder?
Grüße,
Phil73