2017-01-27 6 views
5

Ich habe erstellt Klasse für Entität in Xcode 8 mit edition-> create NSManagedObject Unterklasse. Es erstellt 2 Dateien eins mit +CoreDataProperties Erweiterung und ein weiteres mit +CoreDataClass Erweiterung.Erstellen Sie NSManagedObject-Klasse in Xcode 8.1 mit Fehler

Nachdem diese Dateien hinzugefügt sind immer Fehler Linker Befehl fehlgeschlagen und seine zeigt doppelte Dateien ... Ich habe überprüft, ob die Datei zweimal auf Finder hinzugefügt wird, sowie in Xcode

Wenn ich entferne CoreDataClass.m Datei aus Kompilierquellen, dass der Fehler verschwunden ist, aber die App abstürzt. Ich kann nicht auf die Eigenschaften der Entitätsklasse zugreifen. Wie löst man das?

Antwort

2

Wenn Sie ein NSManagedObject erstellen, stellen Sie sicher, dass CodegenManual/None ist.

Wählen Sie Entity, auf dem Data Model Inspector (rechte Seite) unter Klasse, Ihre Codegen zu Manual/None ändern dann NSManagedObject erstellen.

Wenn Sie bereits NSManagedObject erstellt haben und der doppelte Dateifehler bereits angezeigt wird, löschen Sie Ihre abgeleiteten Daten (Datei -> Arbeitsbereichseinstellungen -> Klicken Sie auf den Link für abgeleitete Datenordner), Buildordner bereinigen (redundant? Nicht sicher) und erstellen Sie Ihre wie oben gezeigt.

+0

Codegen in Manual/None ändern löst mein Problem, aber was ist das nötig –

0

Ja. Weil post Xcode 8.0 jetzt eine eigene Klassendatei für Ihre Kerndateneinheit erstellt. Sie können eine Erweiterung (für diese Klasse) hinzufügen, wenn Sie eine Additionsfunktionalität schreiben möchten.

SO entfernen Sie einfach die Klassen sauber Projekt, (möglicherweise Xcode erneut starten, wenn das Problem bestehen) und Sie werden gut zu gehen.

0

Swift 3.2

vereinbarungs und häufiger Ansatz, sollten Sie Kategorie/extensions in codegen in Einheit inspecter erzeugen, dann erstellen Sie manuell eine Unterklasse von NSManagedObject (wieder häufiger die Klasse mit dem gleichen Namen zu nennen Als die Entity) und du bist gut zu gehen, der Grund, warum Sie eine Klasse/Erweiterung Ihrer Entities haben müssen ist, dass es viel einfacher ist, mit Ihren Entitätsattributen als Vars umzugehen, nicht "manuell" wie Wert (forKey : "") als Any ?, weil, wenn es darum geht, Daten mit dieser Technik zu speichern, auch wenn Sie es als ein Datum oder eine Zeichenfolge, Swift ist ein bisschen "allergisch" Typ Any, weil es nicht stark bezeichnet wird, Deshalb wir Avo ID mit Any so viel wie möglich

Verwandte Themen