2016-07-23 19 views
1

Ich lese ein paar CoreData Tutorials und Apple-Dokumentation, aber ich habe noch nichts gefunden: wie CoreData vollständig mit einer benutzerdefinierten Klasse zu integrieren.Anpassung der benutzerdefinierten Klasse mit CoreData kompatibel

Angenommen, ich habe die benutzerdefinierte Klasse Dog und ich habe "Include CoreData" beim Erstellen des Projekts aktiviert.

Der Hund hat ein paar Eigenschaften wie name, legsNumber und einige Aufzählungen wie vaccinationStatus mit den Fällen .Vaccinated und .NotVaccinated.

Von dem, was ich verstehe, ist der einzige Weg, eine neue Datei zu erstellen und den Code anzupassen. Ich muss eine Unterklasse erstellen und sie einer Entität (Dog in diesem Fall) aus der Datei .xdatamodeld zuweisen. Dann erstellt es 2 Dateien Dog+CoreDataProperties.swift und Dog.swift.

Und ich sollte in Dog+CoreDataProperties.swift die Eigenschaften hinzufügen, die ich den Hund haben möchte, wie @NSManaged var name: String und legsNumber, aber was ist mit der Enum?

Kann es so sein?

@NSManaged enum VaccinationStatus { 
    case Vaccinated 
    case NotVaccinated 
    } 

Kann ich eine weitere Klasse mit Eigenschaften hinzufügen? Wie ein Array mit, sagen die Markennamen und Preise der Kleidung jedes Hundes (irgendwie extrem, aber Sie verstehen, was ich meinte). Oder muss ich eine andere Entität hinzufügen und eine andere Datei erstellen und NSManaged Eigenschaften hinzufügen?

Antwort

1

Im Allgemeinen würden Sie das Modell erstellen, fügen Sie alle Ihre Attribute dort hinzu und dann würde Xcode den Code für Sie generieren. Für Ihr Enumerat würde ich eine Ganzzahl oder einen Booleschen Typ im Modell verwenden (abhängig vom Aufzählungstyp).

Jetzt können Sie in den von Xcode generierten Klassen zusätzliche Funktionen hinzufügen, die die Daten Ihrer Entität offen legen und eine Mutation dieser Daten auf beliebige Weise zulassen. Rufen Sie nur die Setter und Getter auf, die Xcode für Sie generiert .

Also in dieser Klasse definieren Sie Ihre Aufzählung, und fügen Funktionen zum Festlegen und Abrufen der Aufzählung, und das wird konvertiert die gelieferten Aufzählung auf ein Sieden und speichern Sie es in der Entität. Sie können den Rohwert der Aufzählungen verwenden, um zu helfen.

Sie müssen auch darüber nachdenken, wie und wann Sie sparen ...

+0

Konnten Sie etwas Code zur Verfügung stellen? Ich recherchierte weiter, aber ich habe immer noch nicht gefunden, was ich wollte. Nehmen wir an, ich habe die Entität 'EmployeeEntity' mit den Attributen' name' und 'dateOfBirth' (String und Date). Jeder Mitarbeiter kann Aufgaben erfüllen. Also sollte das eine andere Entität TaskEntity mit den Attributen taskName und taskStatusValue sein? Und fügen Sie "Aufgaben" als eine Beziehung zu "EmployeeEntity" und "Mitarbeiter" zu "TaskEntity" hinzu? Und dann sollte ich die Dateien für beide Entitäten erstellen? Ich möchte im Grunde, dass das Endergebnis für mich der Zugriff auf 'employee.task [0] .status' ist. Ist die obige Logik korrekt? – Lawrence413

+0

Und dann, wenn ich den Code in diesem Tutorial (in der Enums-Sektion) http://www.jessesquires.com/better-coredata-models-in-swift/ in 'Task.swift' hinzufügen werde ich in der Lage sein Zugriff auf 'employee.task [0] .status'? – Lawrence413

+0

Ja, deine Logik klingt gut. Ich hatte keine Zeit, das Tutorial zu betrachten, auf das Sie verweisen – Wain