53 votes

redéclaration invalide en code automatique générer NSManagedObject Subclass Swift 3

L'aide de la Version 8.1 de Xcode.

Créer une entité nommée "MapRegionObject".fichier xcdatamodeld.enter image description here

L'utilisation de l'auto générateur de code, cliquez sur l'Éditeur sur la barre de navigation -> créer NSManagedOject sous-classe...

A deux fichiers : MapRegionObject+CoreDataClass.swift et MapRegionObject+CoreDataProperties

Les erreurs dans les deux fichiers montrant dans la capture d'écran: MapRegionObject+CoreDataClass.swift enter image description here

MapRegionObject+CoreDataProperties enter image description here

Merci de m'aider à résoudre ce bug, merci beaucoup!

128voto

Kamillpg Points 1230

Dans Xcode 8.1, avant d'utiliser l'auto générateur de code, vous devez sélectionner l'entité dans votre modèle de données:

Entity

Ensuite, allez dans le Modèle de Données de l'Inspecteur de l'onglet:

Data Model Inspector

En vertu de l' "Codegen" sélectionner "Manual/Node"

Après cela, vous pourrez créer un NSManagedObject sous-classe sans erreurs.


Sinon, si vous avez déjà utilisé la "Définition de la Classe", vous pouvez aller dans votre existant .xcdatamodeld fichier et de définir toutes les entités Manuel/None' en vertu de Codegen. Assurez-vous d'enregistrer votre projet (Fichier> Enregistrer), supprimer votre Dérivées de Données, nettoyez le projet, et ensuite construire. Résolu pour moi, sans avoir à re-faire mon modèle dans son ensemble.

20voto

P. Ent Points 311

J'ai trouvé ce truc d'être très déroutant. Vous avez vraiment besoin de comprendre ce qui est nouveau dans CoreData. Fondamentalement, la valeur par défaut est de générer automatiquement la classe et les extensions pour vous dans un endroit appelé "DerivedData" qui est enterré dans ~/Bibliothèque/Développeur/Xcode/DerivedData où ces classes et de leurs extensions de vivre, à l'extérieur de votre code source. Personnellement, n'étant pas en mesure d'ouvrir et de les regarder est bizarre pour moi, mais quelque chose m'habituer.

En gros, si vous avez une entité appelée "AppSettings" dans votre CoreData modèle, vous pouvez simplement l'utiliser sans avoir besoin de générer le code vous-même. Si vous voulez le code dans votre projet, puis de définir la Codegen propriété de l'entité à Manuel/Aucun. Puis faire ce que vous faisiez avant: Editeur->Créer NSManagedObject de classes, etc. Les fichiers de vent dans votre projet.

La bonne nouvelle est que si vous voulez faire des extensions personnalisées, il suffit de faire cela dans votre projet. Xcode mélanger les fichiers générés, à partir de leur autre endroit à l'extérieur de votre répertoire de projet, avec les fichiers dans votre répertoire de projet.

8voto

ruan65 Points 402

1) nettoyer le projet (cmd + shift + K)

2) Dans "l'inspecteur de modèle de données" pour chaque attribut d'ensemble d'entités créé pour la classe, comme dans la capture d'écran ci-dessous

capture d'écran

3) Générez à nouveau le code (éditeur -> créer des sous-classes NSManagedObject)

Après cela, tout devrait bien fonctionner.

3voto

victor_luu Points 59

Le problème, c'est que vous n'avez pas besoin de générer NSManagedObjectModel sous-classes manuellement plus. ref: https://forums.developer.apple.com/thread/48988

Xcode génère automatiquement des classes ou des extensions de la classe pour l' les entités et les propriétés dans une Base de Données modèle de données. Automatique de code génération est activé et désactivé à une entité par entité, et est activé pour toutes les entités de nouveaux modèles à l'aide de l'Xcode 8 fichier format. Cette fonctionnalité est disponible pour tout modèle de données qui a été mis à jour de 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 du fichier inspecteur. Lors de la génération de code automatique est activée pour une entité, Xcode crée une classe ou d'une classe d'extension de l'entité spécifié dans l'entité de l'inspecteur: le nom de classe spécifié est utilisé et les sources sont placées dans le cadre du projet des Données Dérivées. Pour les deux Rapide et Objective-C, ces classes sont directement utilisables à partir de la code du projet. Pour Objective-C, un autre en-tête de fichier est créé pour tous généré des entités du modèle: Le nom de fichier est conforme à la convention de nommage 'DataModelName+CoreDataModel.h'.

2voto

Satendra dagar Points 306

Fermer le projet et de suivre les instructions suivantes:

  1. Afficher dans le finder de votre base de données .fichier xcdatamodeld.
  2. sur .fichier xcdatamodeld clic droit -> Afficher le Contenu du Paquet, si(.xcdatamodel) est de trouver de nouveau dans le paquet de nouveau clic droit et "Afficher le Contenu du Paquet'. vous devriez obtenir le contenu du fichier".
  3. Ouvrir "contenu" dans l'éditeur de texte.
  4. Commande-F (codeGenerationType="classe") et de le remplacer tous les couplages chaîne avec la chaîne vide.

Enregistrez et ouvrez Xcode projet de nouveau.Tout devrait bien fonctionner.

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