Xcode-beta 8. Impossible de créer des données de base

J'ai essayé d'append des données de base. Et chaque fois que j'ai la même erreur:

error: filename "EntityName +CoreDataClass.swift" used twice: '/Users/userName/Desktop/Development/MyApp/AppName/EntityName +CoreDataClass.swift' and '/Users/userName/Library/Developer/Xcode/DerivedData/AppName-dgwzrmxsetzvtedibxrazuutjwnh/Build/Intermediates/AppName.build/Debug-iphoneos/AppName.build/DerivedSources/CoreDataGenerated/Model/EntityName +CoreDataClass.swift' 

J'ajoute des données de base en utilisant les étapes suivantes:
1. Nouveau file / DataModel; enregistrez-le dans le directory racine de mon projet
select Model.xcdatamodeld et ajoutez l'entité, ajoutez plusieurs attributes, enregistrez, éditez / créez la sous-class NSManagedObjectClass.

Par conséquent, j'observe 4 nouveaux files dans le browser: Model.xcdatamodeld, EntityName + CoreDataProperties.swift, EntityName + CoreDataClass.swift, _COREDATA_DATAMODELNAME_ + CoreDataModel.swift

leur contenu: _COREDATA_DATAMODELNAME_ + CoreDataModel.swift:

 import Foundation import CoreData ___COREDATA_DATAMODEL_MANAGEDOBJECTCLASSES_IMPLEMENTATIONS___ 

EntityName + CoreDataClass.swift:

 import Foundation import CoreData class EntityName: NSManagedObject { } 

EntityName + CoreDataProperties.swift:

 import Foundation import CoreData extension EntityName { @nonobjc class func fetchRequest() -> NSFetchRequest< EntityName > { return NSFetchRequest< EntityName >(entityName: "EntityName"); } @NSManaged var str: Ssortingng? } 

Ce que j'ai essayé:
1. Nettoyer la construction, supprimer DerivedData, supprimer le contenu de var / folders, redémarrer
2. Supprimer les files générés, affichés dans le browser

Tous mes efforts étaient hors de la chance.
Qu'est ce que je fais mal?

Xcode 8 inclut la génération automatique de class NSManagedObject lorsque le file model utilise le format de file Xcode 8. Si vous créez vos propres files de sous-classs, vous créez des duplicates. Le deuxième file dans le message d'erreur, dans DerivedSources , est celui que Xcode a créé automatiquement.

Si les files générés automatiquement font ce dont vous avez besoin, arrêtez de créer le vôtre et tout ira bien.

Si vous voulez créer vos propres sous-classs à la place, vous pouvez soit

  • Définir la "version d'outils" pour que le file de model soit Xcode 7.3 ou plus tôt pour désactiver toute génération de code (cela ne semble pas changer quelque chose de significatif sur le contenu réel du file), ou
  • Désactivez la génération automatique pour chaque entité individuellement en définissant le paramètre "Codegen" sur "Manual / None" pour l'entité.

Il y a deux bogues dans XCode 8 ici:

1 – Si vous modifiez la list déroulante Codegen, sa nouvelle valeur n'est pas enregistrée dans Model.xcdatamodel. Vous devez changer quelque chose pour l'save. Par exemple, changez le nom de la class; build; change le nom de la class; build à nouveau.

2 – Le code généré est placé dans DerivedData dans le dossier Intermediates, mais cela n'arrive que si le dossier n'existe pas déjà. La solution de contournement est de faire un nettoyage puis une construction.

J'ai en fait le même problème (en utilisant Swift) et je suspecte que c'est un bug. Si je comprends bien, l'OP utilise les sous-classs autogen NSManagedObject de Xcode et ne crée pas ensuite de sous-classs supplémentaires (superflues) qui semblent être une source de confusion.

Étapes à suivre pour reproduire:

  1. Créez un nouveau projet, une application à vue unique. Cochez "Utiliser datatables de base"

  2. Créez une entité dans l'entité du model, ajoutez des propriétés, assurez-vous que le file est sauvegardé (parfois, Xcode 8 bêta lève datatables s'il n'est pas explicitement sauvegardé)

  3. Sélectionnez Éditeur -> Sous-class NSManagedObject créée. Cochez les cases appropriées

Xcode crée 3 files:

  1. COREDATA_DATAMODELNAME_ + CoreDataModel.swift. Ce file est corrompu et contient des inputs non-valides après les instructions d'import de Foundation et CoreData – le projet ne comstackra pas à less que ce file ne soit supprimé

     import Foundation import CoreData ___COREDATA_DATAMODEL_MANAGEDOBJECTCLASSES_IMPLEMENTATIONS___ 
  2. EntityName + CoreDataClass.swift

  3. EntityName + CoreDataProperties.swift

Bien que l'éditeur ne signale aucune erreur à ce stade, les tentatives de compilation échouent pour les raisons listées par l'OP (à savoir les files manquants avec les mêmes noms mais avec un préfixe '.' Dans le dossier DerivedData)

Si vous créez manuellement les sous-classs NSManagedObject après avoir créé votre model sans utiliser l'algorithm automatique de Xcode, il n'y a pas de problème. Un peu plus typé mais beaucoup plus fiable! Cependant, vous devrez commencer à partir d'un projet «propre» (c'est-à-dire avant de tenter de générer automatiquement les sous-classs), sinon l'erreur persistera. Nettoyer datatables dérivées n'aidera pas sortingstement.

***** UPDATED ***** Il semble y avoir quelque chose d'assez étrange et il semble y avoir une génération de code silencieux comme initialement suggéré (excuses) mais c'est un comportement très différent de ce à quoi on s'attendrait. De plus, ce code n'est pas visible dans l'éditeur (ce qui semble un peu inutile et confus). Il est créé dans un sous-dossier de DerivedData> Build> Intermediates> .Build.

Je peux complètement voir pourquoi l'OP était confus (comme moi!) Pour ce que ça vaut cette "fonctionnalité" est sans aucun doute une tentative d'être utile mais est quelque peu déroutant si vous êtes habitué au comportement précédent et vous offre une option pour générer une copy visible et modifiable du menu principal.

Donc, select 'Manual / None' dans la window Codegen (ci-dessous) et ensuite vous pouvez utiliser l'option auto-gen dans la barre de menu (après avoir supprimé le 'junk') ou écrire votre propre code.

Nouvelle option XCode 8 codegen

Suivez ces étapes,

  1. Désactivez la génération automatique pour chaque entité individuellement en définissant le paramètre "Codegen" sur "Manual / None" pour l'entité.

  2. Changez le nom de l'entité en quelque chose d'autre pour l'save. Par exemple, changez le nom de la class; build; change le nom de la class; build à nouveau.

J'ai cette erreur à,

juste le changement de la version de l'outil à Xcode 7.3 dans votre file .xcdatamodeld

et ça marche bien!

Pour tous ceux qui ont du mal à faire fonctionner l'autogène:

J'ai dû mettre le "com.apple.syncservices.Syncable" à "NON" sur les parameters d'informations user pour l'entité.

Peut-être que ça aide.

Tom Harrington Réponse correcte. Cependant, il existe un moyen d'append vos propres fonctions et / ou vars sans faire aucune des deux options mentionnées.

Créez simplement une extension à la class . (Assurez-vous de nommer le file swift quelque chose de différent des files NSManagesObject générés automatiquement standard.)

Par exemple. Si vous avez une entité appelée MyEntity vous pouvez append un file Swift appelé MyEntityExtension.swift qui pourrait ressembler à ceci:

 import Foundation import CoreData import UIKit extension MyEntity { var color: UIColor { get { return self.colorValue as! UIColor } set { if newValue.isMember(of: UIColor.self) { self.colorValue = newValue } } } } 

Après avoir essayé une poignée de réponses, le redémarrage de ma machine a fonctionné pour moi.