web-dev-qa-db-fra.com

erreur «les noms de fichiers sont utilisés pour distinguer les déclarations privées du même nom»

Je reçois cette erreur lors de la génération d'un NSManagedObject dans Xcode 8.1 dans Swift.

: 0: erreur: nom de fichier "DemoOne + CoreDataClass.Swift" utilisé deux fois: '/ Users/Swasidhant/Desktop/demo again/DemoOne + CoreDataClass.Swift' et '/ Users/Swasidhant/Library/Developer/Xcode/DerivedData/demo_again- hiinrbwwbmyfbrbctsfdzvudkkuy/Build/Intermediates/demo again.build/Debug-iphonesimulator/demo again.build/DerivedSources/CoreDataGenerated/Model/DemoOne+CoreDataClass.Swift ': 0: remarque: les noms de fichiers sont utilisés pour distinguer les mêmes déclarations privées: les noms de fichiers sont utilisés pour distinguer les déclarations privées: : erreur: nom de fichier "DemoOne + CoreDataProperties.Swift" utilisé deux fois: '/ Users/Swasidhant/Desktop/demo again/DemoOne + CoreDataProperties.Swift' et '/ Users/Swasidhant/Library/Developer/Xcode/DerivedData/demo_again-hiinrbwwbmyfbrbctsfdzvudk/Build/Intermediates/demo again.build/Debug-iphonesimulator/demo again.build/DerivedSources/CoreDataGenerated/Model/DemoOne+CoreDataProperties.Swift ': 0: remarque: les noms de fichiers sont utilisés pour distinguer les déclarations privées portant le même nom Command/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefaul Échec de t.xctoolchain/usr/bin/swiftc avec le code de sortie 1

J'ai cherché cela et obtenu des réponses disant que le fichier pourrait être présent deux fois dans le projet, ce qui n'est pas mon cas. Une autre solution que j'ai trouvée était de supprimer le fichier de la phase de construction et de l'ajouter à nouveau. Cela aussi n'a pas fonctionné. Est-ce une erreur de configuration du paramètre de construction? Ou autre chose?

Voici le lien avec un projet de démonstration créé avec Xcode 8.1 et montrant ce problème: - https://www.dropbox.com/s/xwyzhshktb2hqe7/demo2.zip?dl=

41
Swasidhant

Le problème se produit en raison de la fonction de génération automatique de sous-classe Xcode .

Selon Quoi de neuf dans les données de base

Génération automatique de sous-classes Xcode

Xcode prend désormais en charge la génération automatique de sous-classes NSManagedObject dans l'outil de modélisation. Dans l'inspecteur d'entité:

  • Manuel/Aucun est le comportement par défaut et précédent; dans ce cas, vous devez implémenter votre propre sous-classe ou utiliser NSManagedObject.
  • Catégorie/Extension génère une extension de classe dans un fichier nommé comme ClassName + CoreDataGeneratedProperties. Vous devez déclarer/implémenter la classe principale (si dans Obj-C, via un en-tête, l'extension peut importer nommé ClassName.h).
  • La définition de classe génère des fichiers de sous-classe nommés comme ClassName + CoreDataClass ainsi que les fichiers générés pour Category/Extension.

Les fichiers générés sont placés dans DerivedData et reconstruits sur la première version après l'enregistrement du modèle. Ils sont également indexés par Xcode, donc un clic de commande sur les références et une ouverture rapide par nom de fichier fonctionne.


Donc, pour résoudre votre problème, vous devez définir la valeur du champ Codegen sur Manual/None comme indiqué ci-dessous: Core Data Codegen

106
Midhun MP

Voici ce que j'ai fait pour résoudre ce problème,

  1. Sélectionnez votre entité dans le modèle de données
  2. Réglez le Module sur Module de produit actuel
  3. Laissez le Codegen à Définition de classe bien que Manuel/Aucun fonctionne également
  4. Sélectionnez Editeur> Créer une sous-classe NSManagedObject
12
superm0

Peut aider quelqu'un, allez à la source de compilation du projet, supprimez la référence supplémentaire, le cas échéant.

6
Naveen Shan

Sélectionnez le modèle de données de code, puis sélectionnez l'entité, modifiez la valeur de 'Codegen' en Manuel/Aucun.

Ça va marcher.

5
Yogendra Singh

Le problème était dû à un deuxième fichier nommé: "Extensions.Swift" dans mon projet.

Après avoir supprimé le "Extensions.Swift" en double, l'erreur a été résolue. Votre message d'erreur peut vous indiquer quel fichier est dupliqué.

3
Darkwonder

Dans mon cas, le modèle de données (par exemple: MyCoreData.xcdatamodeld) a été répertorié deux fois sous Editeur -> Créer une sous-classe NSManagedObject ... Et voici pourquoi il obtenait ce type d'erreur.

Ce que j'ai fait:

  1. J'ai supprimé le fichier MyCoreData.xcdatamodeld.
  2. A créé un autre modèle de données comme exemple MyCD.xcdatamodeld.
  3. Vérifié est ici les modèles de données dupliqués ici: Éditeur -> Créer une sous-classe NSManagedObject ...
  4. Nettoyer et construire plus tard deux fois.
0
Ramis

Cela m'est arrivé lorsque j'ai copié et renommé entité. Il n'a pas réussi à renommer la classe, alors faites-le manuellement.

0
catanore