2016-04-10 17 views
1

Gibt es eine Möglichkeit zu verhindern, dass abstrakte Entitäten im Diagrammeditor in XCode 7 angezeigt werden? Alle meine Entitäten erben von super abstrakten Entitäten, und das Diagramm ist überladen, weil die abstrakten Entitäten im Diagramm mit Pfeilen angezeigt werden, die die Vererbung für ihre untergeordneten Klassen anzeigen. Kann das geändert werden?XCode: Abstrakte Entitäten aus dem Core Data-Diagramm ausschließen

+0

Ich glaube nicht. Was bieten Ihnen diese abstrakten Entitäten in Bezug auf echte Funktionalität? – Wain

+0

Danke. Die abstrakten Entitäten stellen Attribute bereit, die von ihren untergeordneten Attributen gemeinsam genutzt werden. Die NSManagedObject-Unterklassen verfügen auch über bequeme Methoden, die ich hinzugefügt habe, um die Funktionen zu unterstützen, die für alle Entitätstypen gelten. – mashers

+1

@mashers Sie können weiterhin die Klassenvererbung ohne Entitätsvererbung verwenden. Im Modelleditor schließen Sie die allgemeinen Attribute für jede Entität ein (und modellieren nicht die abstrakte Entität), aber in der Klassendefinition ändern Sie jede Unterklasse so, dass sie von der Klasse der abstrakten Entität erbt. – pbasdf

Antwort

1

Nein, dies kann nicht geändert werden. Sie können das Diagramm nur in einem anderen Programm neu zeichnen.

Dieses Problem weist jedoch auf ein anderes Problem hin: Wenn Sie die meisten Ihrer Entitäten von einer übergeordneten Entität geerbt haben, sollten Sie beachten, dass diese alle in derselben SQLite-Tabelle gespeichert werden. Dies könnte möglicherweise zu Leistungsproblemen führen und in jedem Fall die meisten Effizienzvorteile eliminieren, die sich dadurch ergeben, dass das Objektdiagramm im Hintergrund durch eine relationale Datenbank dargestellt wird.

Wenn also alle Ihre Entitäten beispielsweise ein sync-Feld haben, sollten Sie dieses Attribut allen Entitäten hinzufügen oder ein anderes Schema finden, um den Synchronisierungsstatus zu verfolgen.

+0

Danke für die Erklärung. Ich zeichnete das Diagramm von Hand, indem ich die Beziehungen befolgte. Ich hatte keine Ahnung, dass Entitäten, die von einer abstrakten Entitätsklasse erben, in derselben Tabelle gespeichert werden. Ich überdenke diese Strategie zugunsten des einfachen Kopierens der Attribute in alle Entitäten und des Modifizierens meiner Bequemlichkeitsmethoden, um die Entität als einen Parameter zu nehmen (anstatt Methoden auf der NSManagedObject-Subbasis zu sein und "self" innerhalb der Methoden zu verwenden). Allerdings scheint die Performance für den Moment völlig ausreichend, also werde ich es nach Gehör spielen. – mashers

+0

Apple verwenden Vererbung immer in ihren Apps, es ermöglicht ihnen, mehrere Entitäten von einem einzelnen Abruf, z. In Notes rufen sie Accounts und Ordner ab, indem sie ihre übergeordnete Entität abrufen, die Container, mächtiges Zeug ist. Entwerfen Sie Ihr Modell anhand dessen, wie es in Ihrer Benutzeroberfläche angezeigt wird, anstatt es wie eine relationale Datenbank zu betrachten. – malhal

+0

@malhal Nun, ja, aber die Notes App ist kein gutes Beispiel, da sie nur sehr wenige Einträge enthält und das Schema nicht gut skalierbar ist. Niemand wird 100.000 Noten haben, wahrscheinlich nicht einmal 100. Wie gesagt, es ist ein ausgezeichnetes Beispiel, um die Kompromisse zu illustrieren. – Mundi

Verwandte Themen