2010-12-22 20 views
1

Beispiel: Ich habe eine Entität mit der Bezeichnung Car, die abstract ist. Dann gibt es zwei untergeordnete Einheiten Cabriolet und Pickup.Core Data Vererbung: Ist es in Ordnung, dies zu tun?

Jetzt habe ich eine Entität mit der Bezeichnung Driver, die eine Beziehung namens currentCar 1..1 an die Entität Car hat. So kann ich der currentCar Eigenschaft eines Treibers entweder ein Cabriolet oder einen Pickup zuweisen. Dann müsste ich das Objekt inspizieren, um zur Laufzeit herauszufinden, ob ich ein Cabriolet oder Pickup habe, wenn ich das currentCar vom Fahrer bekomme. Ist dies ein gültiges Design in Core Data?

Antwort

2

Ich sehe nicht, warum dies auf einer technischen Ebene nicht funktionieren würde, aber es verletzt OOP Polymorphismus.

Warum müssen Sie wissen, ob die Art des Autos? Wären Sie in der Lage, die Methoden der abstrakten Oberklasse (Car) zu definieren und sie in den Unterklassen (Cabriolet und Pickup) entsprechend zu überschreiben? Könnten Sie die Autohierarchie umgestalten, so dass die Attribute der Unterklassen allgemeiner werden und sie in Attribute von Car verschieben, wodurch die Notwendigkeit für die Unterklassen entfällt?

Ich hatte Probleme mit NSFetchResultsController beim Abrufen von Objekten aus einer gemeinsamen Oberklasse abgeleitet. (Die zurückgegebenen Objekte können nur nach einem Attribut der Entität sortiert/gruppiert werden. Der Klassentyp ist kein Attribut, kann also nicht zum Sortieren/Gruppieren der Entitäten verwendet werden. Meine Lösung/Hack war zu einem type Attribut der Superklasse - hässlich, aber es hat funktioniert.)

+0

Ein Cabriolet fügt einen BOOL hasElectricRoof hinzu. Grundsätzlich ist die Frage, ob ich das currentCar abhole und mir vorher ein Cabriolet (welches auch ein Auto ist) zugewiesen habe, ob ich es dann in ein Cabriolet werfen könnte? Oder werden Core-Daten nicht die Eigenschaften abrufen, die nur in Cabriolet definiert sind? –

+0

@BugAlert: Ja. Sie können Daten immer mit der Methode 'valueForKey:' abrufen, vorausgesetzt, die Klasse ist eine Unterklasse von 'NSManagedObject'. –

+0

Das ist nicht der Punkt, Benedikt. Ich weiß, dass ich Objekte holen kann. Der Punkt ist: Werden die spezialisierten Eigenschaften verfügbar und abgerufen, wenn der Fehler ausgelöst wird, oder werden sie nicht ?! –

Verwandte Themen