42 votes

Fichiers en double dans le dossier DerivedData à l'aide du générateur CoreData

Je suis en train de générer NSManagedModels de mon datamodel. Génération fonctionne, mais après j'ai eu de nombreuses erreurs :

erreur: le nom de fichier "de la Station de+CoreDataProperties.swift" utilisé à deux reprises: '/Users/Moi/MyApp/Modèles/CoreData/Station De+CoreDataProperties.swift " et '/Users/Me/Library/Developer/Xcode/DerivedData/MyApp-gwacspwrsnabomertjnqfbuhjvwc/Build/Intermediates/MyApp.build/Debug-iphoneos/MyApp.build/DerivedSources/CoreDataGenerated/Model/Station+CoreDataProperties.swift' :0: remarque: les noms de fichiers sont utilisés pour distinguer privé les déclarations du même nom

J'ai essayer de nettoyer le dossier de création et derivedData répertoire supprimer dur. Je suis en utilisant Xcode BETA 8 c'est peut-être un bug ?

72voto

Vladimir Shutyuk Points 514

Je reçois cela dans Xcode 8.1 Pour moi, les étapes suivantes ont résolu le problème. Veuillez noter que l'ordre compte.

1) Créer une entité dans le modèle Core Data.

2) Sous la section de la classe, définissez les paramètres comme sur l'image suivante.

Module: Nom du produit actuel

Codegen: Manuel / Aucun

3) Générez votre sous-classe NSManagedObject.

entrez la description de l'image ici

11voto

kev Points 911

Ce post m'a grandement aidé à résoudre ce problème moi-même. Personnellement, je considère cela comme un bug de Xcode. Bug ou pas c'est une situation énorme d'œufs et de poules.

Je suis tombé dessus par:

  1. Création d'un nouveau projet en utilisant des données de base
  2. A généré mon NSManagedObject sous-classe + extension (alors que codegen: ClassDefinition )
  3. J'ai accidentellement enregistré les classes générées dans le dossier Wrong
  4. J'ai supprimé les fichiers générés
  5. Re-généré dans le dossier que je voulais

9voto

oyalhi Points 2082

Ce n'est effectivement pas un bug. Comme @Morrowless suggère à la fois la définition de la classe et d'extension de propriétés sont créés. Si ce n'est pas voulu, sélectionnez Manuel/Aucun sous Codegen avant de générer le code. Si le code est déjà généré, il suffit de les supprimer, et essayez Editor->Create NSManagedObject Subclass... de nouveau à partir du menu (après réglage Manuel/Aucun).

Remarque, dans le tableau ci-dessous, le Nom de la Classe "Contact" est spécifique à mon projet. Vous verrez votre nom de l'entité à la place.

enter image description here

5voto

100grams Points 1185

Si vous avez généré des sous-classes CoreData avec codegen: ClassDefinition vous êtes fondamentalement vissé. La seule façon de résoudre ce problème est de:

  1. Supprimez vos sous-classes CoreData.
  2. Supprimez votre dossier de données dérivé.
  3. Nettoyez votre projet (CMD + K).
  4. Générez de nouvelles sous-classes CoreData, cette fois-ci sélectionnez Codegen: Manual/None et Module: Current Product Module

3voto

Plenilune Points 2561

Ce n'est pas un bug. Codegen génère ces fichiers dans le DerivedData dossier, de sorte que vous n'avez pas besoin de créer de nouveau dans votre projet, d'où l'erreur de compilation.

À partir de Xcode Version 8.0 notes:

Xcode génère automatiquement des classes ou des extensions de la classe pour les entités et les propriétés dans une Base de Données modèle de données. La génération automatique de code est activé et désactivé à une entité par entité, et est activé pour toutes les entités de nouveaux modèles qui utilisent le Xcode 8 format de fichier. Cette fonctionnalité est disponible pour tout modèle de données qui a été mis à jour Xcode 8 format. Vous devez spécifier si vous Xcode génère Swift ou code Objective-C pour un modèle de données en utilisant le modèle de données de fichier de l'inspecteur.

Lors de la génération de code automatique est activée pour une entité, Xcode crée soit une classe ou d'une classe d'extension de l'entité, comme spécifié dans le entité de l'inspecteur: le nom de classe spécifié est utilisé et les sources sont placés dans le projet est Dérivé des Données. Pour à la fois rapide et Objective-C, ces classes sont directement utilisables à partir du projet code. Pour Objective-C, un autre en-tête de fichier est créé pour tous les généré des entités de votre modèle. L'en-tête de nom de fichier est conforme à la convention de nommage "DataModelName+CoreDataModel.h".

Toutefois, si vous avez sélectionné la Catégorie/Prorogation en vertu de la codegen menu déroulant dans le modèle de données de l'inspecteur (parce que vous voulez ajouter de la logique de votre modèle): codegen aura tort de générer à la fois la définition de la classe et d'extension de propriétés.

La solution est tout simplement de supprimer l'extension de propriétés (ClassName+CoreDataProperties.swift). Votre projet doit maintenant compiler.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X