2010-12-18 1 views
0

Ich habe ein generisches Modellframework mit einigen Entitäten und Beziehungen, die ich für eine Vielzahl von Anwendungen verwenden möchte. Für jede App möchte ich einen bestimmten Satz von Attributen für eine dieser Entitäten definieren. Ich dachte, jede App könnte eine Entität definieren, die das Kind der Basiseinheit ist, aber es scheint nicht so, als ob Sie das tun könnten, wenn sich das Kind in einer anderen Modelldatei befindet. Und wenn ich alle untergeordneten Entitäten in dieselbe Modelldatei einfüge, erhält die Entität in jeder App schließlich Attribute für alle Apps.CoreData: Verschiedene Unterklassen von einer gemeinsamen Basis-Entität in verschiedenen Projekten

Meine einzige Lösung an diesem Punkt ist, nur die Basis-Entity zu haben und ihr Attribut ein Wörterbuch sein. Dann kann jede Anwendung eine Unterklasse von NSManagedObject schreiben, die Eigenschaften definiert, die die passenden Werte im Wörterbuch nachschlagen. Ich denke, dass es Probleme mit der Perfusion geben könnte.

Irgendwelche anderen Ideen oder Gedanken zu meinem Wörterbuchansatz? Vielen Dank!

Antwort

1

Eine Sache, die ich nicht bemerkt habe, als ich das gepostet habe, war, dass Sie das Modell programmgesteuert ändern können. Also habe ich das in jedem Teilprojekt angefangen, um die Untertität mit den projektspezifischen Attributen einzufügen. Dies löste das Problem für eine Weile.

Die Modellmigration war jedoch ein Problem. Ich dachte, wenn ich etwas in der Modelldatei im Basisprojekt ändere, wäre ich in der Lage, automatische Migrations- oder Zuordnungsdateien zu verwenden, um alle Datenspeicher zu migrieren, die die Teilprojekte erstellt haben. Da die Teilprojekte jedoch das Modell modifizieren, hätte ich das alte Modell laden, modifizieren, das neue Modell laden, modifizieren und dann die Migration zwischen diesen beiden durchführen müssen.

All dies wäre ein Schmerz, also änderte ich mein DB-Schema zu etwas flexibler, mit generischen Objekten, Attributen und Wertetabellen. Jetzt kann jedes Teilprojekt einfach die Daten einwerfen, die eine neue Art von Objekt definieren wollen.

0

Ich hatte die gleichen Fragen ... Ich habe eine Basisklasse, die Attribute und Funktionalität für zwei CD-Entities definiert. Aber wenn ich versuche, auf einen Wert von der Oberklasse zuzugreifen, erhalte ich einen Fehler.

Hier ist, was ich getan habe, um es zu lösen.

Machen Sie Ihr Datenmodell und generieren Sie die Klassen wie üblich. Erstellen Sie die Oberklasse manuell als Unterklasse von NSManagedObject. Gib ihm die gleiche Struktur wie die generierten Klassen, also keine deklarierten Variablen, verwende @dynamic, NSNumber * für Zahlen usw.

Das hat den Trick für mich gemacht.

Verwandte Themen