web-dev-qa-db-fra.com

Sous-classe NSManagedObject avec Swift 3 et Xcode 8 bêta

J'ai commencé à essayer d'utiliser les données de base avec Swift 3 et Xcode 8 beta. Lorsque j'essaie de générer des sous-classes NSManagedObject à partir du modèle de données principal et de l'option Créer une sous-classe NSManagedObject… dans le menu Editeur, Xcode 8 beta génère trois fichiers dont l'un estCOREDATA_DATAMODELNAME+ CoreDataModel.Swift avec le contenu suivant:

import Foundation
import CoreData

___COREDATA_DATAMODEL_MANAGEDOBJECTCLASSES_IMPLEMENTATIONS___

De plus, le contenu de ce fichier contient deux avertissements:

Expressions are not allowed at the top level.
Use of unresolved identifier '___COREDATA_DATAMODEL_MANAGEDOBJECTCLASSES_IMPLEMENTATIONS___'

Quelqu'un at-il affronté le même problème? Quel est le sens de ce nouveau fichier?

Merci

19
RFG

C'est probablement un conflit (bêta) avec la nouvelle génération automatique de sous-classes, qui peut être contrôlée dans l'inspecteur d'entités du fichier de modèle de données.

À partir de documentation (Quoi de neuf dans Core Data)

Génération automatique de sous-classes Xcode

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

  • Manual/None est le comportement par défaut et précédent; dans ce cas vous devrait 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 elle est dans Obj-C, l'extension peut importer via un en-tête nommée ClassName.h). - 
  • 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 Catégorie/extension. 

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

44
vadian

J'ai rencontré le problème avec le fichier .Swift cité ci-dessus et j'ai constaté que commenter la ligne ___ COREDATA ... m'avait causé par l'erreur pour l'instant. Je ne suis pas sûr de ce que c'est censé accomplir.

Je constate également que XCODE 8 a tendance à oublier les nouveaux champs ajoutés aux entités CoreData et à réinitialiser à plusieurs reprises la cible de génération de code du modèle CoreData sur Objective C, ce qui entraîne une multitude de fichiers .h et .m au lieu de Swift. fichiers quand il régénère des fichiers. La plupart des problèmes que j'ai vus sont liés à CoreData, mais ont été fonctionnels jusqu'à présent.

Autre que cela, XCODE 8 a été étonnamment solide en travaillant avec une application avec 25 entités de données et plus de 30 contrôleurs de vue, donc je ne me plains pas. 

0
Ron Diel

J'ai des problèmes similaires avec cette version bêta du développeur Xcode 8. Certains ont résolu Command + S (enregistrer les modifications) avant de quitter Data Model ou avant de générer des sous-classes NSManagedObject. Je ne sais pas pourquoi mais dans mon cas, la sauvegarde automatique ne fonctionnait pas parfois et des erreurs se produisaient.

0
Adam Smaka