wake-up-neo.net

Doppelter Symbolfehler beim Hinzufügen der NSManagedObject-Unterklasse, doppelte Verknüpfung

Ich habe versucht, NSManagedObject-Unterklassen (2 zugehörige Entitäten) automatisch in Xcode zu erstellen. Sie werden wie folgt generiert:

enter image description here

Bevor ich jedoch etwas weiter mache, als ich versuchte, es zu erstellen und auszuführen, tritt ein Link-Fehler auf, wie in der folgenden Abbildung gezeigt:

duplicate symbol _OBJC_CLASS_$_Photo in: /Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photo+CoreDataClass.oduplicate symbol _OBJC_METACLASS_$_Photo in: /Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photo+CoreDataClass.oduplicate symbol _OBJC_CLASS_$_Photography in: /Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photography+CoreDataClass.oduplicate symbol _OBJC_METACLASS_$_Photography in: /Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photography+CoreDataClass.old: 4 duplicate symbols for architecture x86_64clang: error: linker command failed with exit code 1 (use -v to see invocation)

Ich habe es mehrere Male versucht, neue Projekte zu erstellen und dasselbe zu tun. Meine ursprüngliche Absicht ist es, benutzerdefinierte Methoden zu Unterklassen hinzuzufügen. Wenn ich jedoch etwas in z. Photo+CoreData.h/m, es wurde derselbe Fehler wie oben angezeigt.

Ich habe einige Antworten zu "Double Include" oder "Dateien in falschem Verzeichnis speichern" gefunden, aber ich habe das nicht getan. Hat jemand eine Idee davon? 

32
KFZ

Wenn Sie die Unterklasse für verwaltete Objekte nicht automatisch generieren, vergessen Sie nicht, die "Codegen" -Einstellungen für eine Entität in Data Model Inspector zu überprüfen:

 enter image description here

49
Andrey Seredkin

Edit: Dank der Hilfe von @iPeter wurde Folgendes gefunden:

Wenn Sie nach dem Bearbeiten von Editoren> NSManagedObject-Dateien erstellen die Dateien vor dem Erstellen in den Papierkorb werfen, sollte Ihr Projekt keine Probleme verursachen. 

 Trash these files

Dann importieren Sie "myManagedObjectName + CoreDataClass.h" (wobei der MO-Name im Entitätsinspektor in den Kerndaten steht) in alle Klassen, in denen Sie diese verwalteten Objekte benötigen. 

Mit anderen Worten, Sie benötigen keine tatsächlichen ManagedObject-Dateien in Ihrem Ordner. Xcode speichert die generierten in Ihrem Ordner "Abgeleitete Daten". 

Wenn Sie aus irgendeinem Grund benötigen, dass diese Dateien in Ihrem Dateiverzeichnis verbleiben, funktioniert die folgende Problemumgehung. Gehen Sie zu Ihrem Ziel und löschen Sie die CoreDataClass-Quellen in Ihren Compile-Quellen.

 Before

Dich dabei lassen:

 After

  • Die meisten der neuen Attribute/Beziehungen, die ich nach der ersten Generierung von ManagedObject-Unterklassen hinzugefügt habe, waren nach einem Build als Eigenschaften verfügbar. In einem Fall, in dem ich eine bestehende Beziehung umbenannt hatte, musste ich noch einmal Editor> NSManagedObject-Unterklassen generieren. Dann wurden die neuen Dateien in meinem Ordner in den Papierkorb verschoben, erstellt und alles hat funktioniert.

Nur schrieb ein Blog-Post, der diese Informationen enthält für alle, die daran interessiert sind. 

41
Mike Critchley

Sie sollten alle diese Entitäten löschen, die "Codegen" -Einstellungen im Data Model Inspector für "Manuell/Keine" ändern und die Entitäten erneut generieren. Es funktioniert gut! Sie müssen + CoreDataClass.h-Dateien nicht aus Compile Source entfernen. Sie müssen Entitäten nicht als abstrakt markieren. Sie müssen keine Klassen selbst erstellen. Sie sollten nur die "Codegen" -Einstellungen ändern und Entitäten automatisch neu generieren  enter image description here

30
Earl0Grey

late Post ... aber für mich war es einfach ein Einfügen einer Entität, Xcode scheint den ursprünglichen Klassennamen, der der Entität zugeordnet ist, nicht zu ändern (siehe Xcode 9.0.1).

0
Chris

Sie müssen die von Ihnen selbst generierte CoreData-Unterklasse entfernen, und Sie können die # import-Zeile bei diesen Klassen beibehalten. Jetzt werden alle diese Dateien automatisch erstellt, wenn Sie das Projekt erstellen.

0
FrogInNightCap