Wann sollten vorübergehende Eigenschaften in CoreData im Objektmodell enthalten sein?

8

Ich bin unsicher bezüglich der korrekten Definition von Übergangseigenschaften:

  1. Man kann transiente Eigenschaften im Objektmodell definieren und sie dann bei Bedarf in der zugehörigen Klasse berechnen.
  2. Aber es funktioniert genauso gut, wenn Sie eine Klasse angeben und willkürliche Getter-Methoden für jede vorübergehende Eigenschaft definieren, ohne sie im Objektmodell zu deklarieren (solange die Entität mit dieser Klasse im Modell verknüpft ist).

Meine Frage: Was ist der Vorteil transiente Eigenschaften im Objektmodell zu deklarieren? Ich sehe nur einen Nachteil: Jedes Mal, wenn Sie eine vorübergehende Eigenschaft hinzufügen (z. B. "FormattedDate"), wird der persistentStore inkompatibel.

Was fehlt mir?

    
FelixLam 14.11.2009, 13:07
quelle

1 Antwort

6

Aus dem Hauptdaten-Programmierhandbuch :

  

Wenn das nicht unterstützte Attribut ein Objekt ist, geben Sie im verwalteten Objektmodell seinen Typ als nicht definiert an, und zwar als transient. Wenn Sie die benutzerdefinierte Klasse der Entität implementieren, müssen Sie keine Instanzvariable für das Attribut hinzufügen. Sie können den privaten internen Speicher des verwalteten Objekts verwenden. Ein Punkt, der über die unten beschriebenen Implementierungen zu beachten ist, ist, dass sie den Übergangswert zwischenspeichern. Dies macht den Zugriff auf den Wert effizienter - dies ist auch für das Änderungsmanagement erforderlich. Wenn Sie benutzerdefinierte Instanzvariablen definieren, sollten Sie diese Variablen in didTurnIntoFault bereinigen, anstatt sie zu delalloc oder finalize.

Ich denke, das bedeutet "Bequemlichkeit" und "alle Ihre Attribute an einem Ort definiert - das Managed Object Model".

Wie bei der MOM-Versionierung lautet die Programmierungshandbuch zur Versionierung und Datenmigration von Kerndaten sagt:

  

Core Data's Sicht auf Versionierung ist, dass es nur an Features des Modells interessiert ist, die die Persistenz beeinflussen.

Er verdeutlicht jedoch nicht seine Position zu Übergangseigenschaften. Tatsächlich klingt der zweite Punkt, der diesen Absatz ausarbeitet, fast wie ein Widerspruch. Ein kurzer Test (neues Projekt mit einer einfachen "Foo" -Einheit mit einem "name" -Attribut, eine Datei mit mehreren Foos speichern, eine transiente Eigenschaft hinzufügen, erneut ausführen und die foos laden, ein neues foo hinzufügen, speichern, schließen, wieder öffnen) zeigt transiente Eigenschaften in der Tat sind nicht von der Versionierung System berücksichtigt.

    
Joshua Nozzi 14.11.2009, 13:53
quelle