Xcode bêta-8. Ne peut pas créer de base de données
J'ai essayé d'ajouter des données de base.
Et à chaque fois j'ai eu le même message d'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'
Je ajouter de la base de données en utilisant les étapes suivantes:
1.Nouveau fichier/modèle de données; l'enregistrer dans le répertoire racine de mon projet
choisissez un Modèle.xcdatamodeld et ajouter une entité, ajouter plusieurs attributs, enregistrer,
éditeur/créer NSManagedObjectClass sous-classe.
Par conséquent, j'ai observer 4 nouveaux fichiers dans le navigateur:
De modèle.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: String?
}
Ce que j'ai essayé:
1. Nettoyer la création, la suppression DerivedData, supprimer le contenu de var/dossiers, redémarrez
2. Supprimer les fichiers générés affiche dans le navigateur
Tous mes efforts ont été hors de la chance.
Ce que je fais de mal?
Vous devez vous connecter pour publier un commentaire.
Xcode 8 inclut automatique
NSManagedObject
génération de classe lorsque le modèle de fichier utilise Xcode 8 format de fichier. Si vous créez votre propre sous-classe des fichiers, vous êtes en train de créer des doublons. Le deuxième fichier dans le message d'erreur, dansDerivedSources
, est celui qui Xcode créé automatiquement.Si le générés automatiquement les fichiers dont vous avez besoin, juste arrêter de la création de votre propre et vous serez OK.
Si vous voulez créer votre propre sous-classes au lieu de cela, vous pouvez soit
NSManagedObject
sous-classe. Mais c'est une erreur, comme tant ` _COREDATA_DATAMODELNAME_+CoreDataModel.swift " et ce fichier est livré avec un couple de messages d'erreur.Il y a deux bugs dans XCode 8 ici:
1 - Si vous changez le Codegen déroulante, c'est la nouvelle valeur n'est pas enregistrée dans le Modèle.xcdatamodel. Vous devez changer quelque chose pour l'obtenir à enregistrer. Par exemple de changer le nom de la classe; construire; modifier le nom de la classe en arrière; de construire à nouveau.
2 - Le code généré est placé dans DerivedData dans les skieurs Intermédiaires dossier, mais il ne se produit que si le dossier n'existe pas déjà. La solution est de faire un nettoyage puis une génération.
Manual/None
, droit? Je sais que dans les versions précédentes, elle a généré deux fichiers, je suppose que c'est pour l'application du sous-classement et apporter des modifications à la non-code généré comme l'ajout de code personnalisé???Je suis tout à fait avoir le même problème (Swift) et soupçonne que c'est un bug. Si je comprends bien l'OP est en utilisant Xcode l'autogen NSManagedObject sous-classes et n'est donc pas par la suite de la création de nouvelles (superflu) les sous-classes qui semble être une source de confusion.
Étapes pour reproduire:
Créer un nouveau projet, une vue unique de l'application. Cochez La Case "Utiliser La Base De Données'
Créer une entité dans le modèle entité, d'ajouter des propriétés, de s'assurer de fichier est
enregistré (parfois Xcode Beta 8 jette les données si pas explicitement
enregistré)
les boîtes de
Xcode crée 3 fichiers:
COREDATA_DATAMODELNAME_+CoreDataModel.swift. Ce fichier est
corrompu et ne contient pas d'entrées valides instructions suivantes
l'importation de la Fondation et de CoreData - le projet ne compile pas, à moins que
ce fichier est supprimé
EntityName+CoreDataClass.swift
EntityName+CoreDataProperties.swift
Bien que l'éditeur n'est pas le drapeau des erreurs à ce stade, essaie de compiler échouer pour les raisons énumérées par les OP (à savoir le manque des fichiers avec le même nom mais avec un '.' préfixe dans la DerivedData dossier)
Si vous créez le NSManagedObject sous-classes manuellement après la création de votre modèle sans l'aide de Xcode est évidemment buggé auto-gen, il n'y a pas de problèmes. Un peu plus à taper, mais beaucoup plus fiable! Toutefois, vous aurez besoin pour commencer à partir d'une "propreté" du projet (c'est à dire avant que vous tentiez d'auto-générer les sous-classes) sinon l'erreur persiste. Le nettoyage des Données Dérivées de ne pas aider malheureusement.
***** Mise à JOUR *****
Il ne semble pas être quelque chose de plutôt étrange se passe et il semble que le silence de génération de code, comme l'avait initialement suggéré (toutes mes excuses) mais c'est très différent du comportement de ce à quoi on pourrait s'attendre. En outre, ce code n'est pas visible dans l'éditeur (qui me semble un peu inutile, car bien que déroutant). Il est créé dans un sous-dossier de DerivedData > Build > Intermédiaires > .Construire.
Je peux tout à fait comprendre pourquoi l'OP était confus (comme moi!) Pour ce que ça vaut cette "fonctionnalité" est sans doute une tentative pour être utile mais qui est un peu déroutant si vous avez l'habitude de comportement précédent et on vous offre une option pour générer un visible et modifiable en double dans le menu principal.
Sélectionnez 'Manual/None" dans le Codegen fenêtre (voir ci-dessous) et ensuite vous pouvez soit utiliser la fonction d'auto-gen option dans la barre de menu (après la suppression de la "junk") ou écrire votre propre code.
De suivre ces étapes,
Désactiver la génération automatique pour chaque entité individuellement par la mise en
le "Codegen" le réglage "Manuel/None" pour l'entité.
Changer le nom de l'entité à autre chose pour l'obtenir à enregistrer. Par exemple
changer le nom de la classe; construire; modifier le nom de la classe en arrière; construire
de nouveau.
J'ai eu cette erreur,
juste le changement de la version de l'outil de Xcode 7.3 dans votre fichier .xcdatamodeld
et il fonctionne très bien!
Pour tout le monde d'avoir de la difficulté à obtenir de l'autogen de travail:
J'ai dû mettre le "com.apple.syncservices.Syncable" sur "NON" dans les Infos de l'Utilisateur paramètres de l'Entité.
Peut-être que ça aide.
Tom Harrington Réponse est correcte. Cependant, il existe un moyen d'ajouter vos propres fonctions et/ou de vars sans faire aucun des deux options mentionnées.
Juste créer une extension de la classe. (assurez-vous de nommer la swift fichier de quelque chose de différent de la norme auto-généré NSManagesObject fichiers.)
Par exemple. Si vous avez une entité appelée
MyEntity
vous pouvez ajouter rapidement un fichier appeléMyEntityExtension.swift
qui pourrait ressembler à quelque chose comme ceci:Après avoir essayé une poignée de réponses, le redémarrage de ma machine a fonctionné pour moi.
Supprimer de la compilation du fichier de base de données dans l'onglet "Build phases" de la section "Compiler la source" pressé -