J'essayais de créer automatiquement des sous-classes NSManagedObject (2 entités liées) dans Xcode. Ils sont générés comme ceci:
Cependant, avant de continuer, lorsque j'essayais de le construire et de l'exécuter, une erreur de liaison se produisait, comme indiqué:
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)
J'ai essayé plusieurs fois en créant de nouveaux projets et fais la même chose. Mon intention initiale est d’ajouter des méthodes personnalisées dans celles des sous-classes. Mais quand j'ajoute quelque chose dans, par exemple Photo+CoreData.h/m
, la même erreur que ci-dessus est apparue.
J'ai trouvé des réponses à propos de la "double inclusion" ou de "l'enregistrement de fichiers dans le mauvais répertoire", mais je ne l'ai pas fait. Quelqu'un a une idée à ce sujet?
Edit: Merci à l’aide de @iPeter, retrouvez les éléments suivants:
Après avoir créé Editeur> Générer des fichiers NSManagedObject, si vous les supprimez AVANT la construction, votre projet ne devrait générer aucun problème.
Ensuite, importez #import "myManagedObjectName + CoreDataClass.h" (où le nom de l'agent de gestion est celui de l'inspecteur d'entités dans les données de base) dans les classes pour lesquelles vous avez besoin de ces objets gérés.
En d'autres termes, vous n'avez besoin d'aucun des fichiers ManagedObject réels dans votre dossier. Xcode conserve les fichiers générés dans votre dossier Derived Data.
Si, pour une raison quelconque, vous avez besoin que ces fichiers restent dans votre répertoire, la solution de contournement suivante fonctionnera. Accédez à votre cible et supprimez les sources CoreDataClass dans vos sources de compilation.
Vous laissant avec ceci:
Je viens d'écrire un article de blog contenant cette information pour quiconque est intéressé.
Vous devez supprimer toutes ces entités, remplacer les paramètres "Codegen" par "Manuel/Aucun" dans l'inspecteur de modèles de données et générer à nouveau des entités. Ça marche bien! Vous n'avez pas besoin de supprimer les fichiers + CoreDataClass.h de Compile Source. Vous n'avez pas besoin de marquer les entités comme abstraites. Vous n'avez pas besoin de générer des cours par vous-même. Vous ne devez modifier que les paramètres "Codegen" et régénérer les entités automatiquement .
post tardif ... mais pour moi était simplement un copier/coller d'une entité, Xcode ne semble pas modifier le nom de classe d'origine associé à l'entité (observé sur Xcode 9.0.1)
Vous devez supprimer la sous-classe liée à CoreData générée par vous-même et conserver la ligne #import avec ces classes. Désormais, tous ces fichiers seront générés automatiquement lors de la génération du projet.