• 12 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 22/03/2024

Créez une entité

Maintenant que Core Data est installée, nous allons pouvoir enfin jouer avec ! Dans le reste des chapitres de cette partie, nous allons utiliser Core Data pour sauvegarder les différentes personnes dont on souhaite noter les dépenses.

Dans ce chapitre, nous allons travailler dans le fichier xcdatamodeld  pour définir notre premier modèle : Person.

Ajoutez l'entité Person

Quand vous ouvrez le fichier xcdatamodeld, il ressemble à ceci :

Le fichier ne contient pas encore des entités, leurs attributs, leurs relations…
Vide… pour l’instant !

Dans ce fichier, vous allez pouvoir définir votre schéma de données. Quelles sont les différentes entités ? Quels sont leurs attributs, leurs relations entre eux, etc. ?

On va rajouter notre première entité : Person. Pour cela, il faut cliquer sur le bouton  Add Entity   en bas à gauche :

Le bouton Add Entity
Add Entity

Une nouvelle entité apparaît dans la section Entities.

Une entité s’affiche dans la section Entities à gauche de notre interface
Notre nouvelle entité

En double-cliquant dessus, vous allez pouvoir modifier son nom et la nommer Person.

Nous modifions son nom : Person.
Notre entité Person

Et voilà ! Vous avez créé votre première entité !

Ajoutez un attribut

Sur la droite, vous avez une section Attributes. Nous allons rajouter un premier attribut à notre entité.

Pour cela, cliquez sur le bouton  +   :

À droite de la section Entities, la section Attributes nous permet d’ajouter un attribut à cette première entité Person.
Ajoutons un attribut

Un nouvel attribut apparaît :

Comme pour les entités, nous pouvons modifier le nom des attributs.
Modifions le nom de ce premier attribut…

Vous pouvez modifier son nom. Nous allons l'appeler name, car il nous permettra de stocker le nom de la personne.

Ensuite, vous pouvez cliquer sur la liste déroulante pour choisir son type :

D’une liste déroulante à droite du nom de notre attribut, sélectionnons String.
Définissons son type

Dans la liste, vous avez plusieurs types possibles pour stocker des données ; vous en reconnaissez la plupart, je pense. Il y a les types numériques, les chaînes de caractères, les dates, les booléens, les data, etc.

Pour notre propriété name , on va bien sûr choisir String.

Notre premier attribut est nommé name et est de type String.
Un bon premier attribut

Et voilà ! Notre attribut est maintenant créé !

Générez automatiquement du code

Je vous ai vendu Core Data comme une base de données orientée objet, dans laquelle, pour gérer vos objets, cela ressemblerait à ceci :

let person = Person()
person.name = "Jean-Pierre"

Je ne vous ai pas menti. Le seul problème, c'est que par défaut, pour créer un objet, il faut en fait écrire ceci :

let person: NSManagedObject = NSEntityDescription.insertNewObject(forEntityName: "Person", into: AppDelegate.viewContext)
person.setValue("Jean-Pierre", forKey: "name")

C'est beaucoup moins joli. Pour avoir le droit à l'option toute belle du dessus, il faut demander à Core Data de générer automatiquement pour nous la classe Person.

Et c'est très simple : sélectionnez votre entité, puis dans les utilitaires à droite, sélectionnez le quatrième onglet (l'inspecteur de modèle de données). On va s'intéresser au réglage Codegen pour Code Generation (en français, génération automatique de code).

Sélectionnez d’abord l’entité, puis cliquez sur le quatrième bouton en haut à droite. Enfin, sous la section Class, cliquez sur la liste déroulante à côté de Codegen.
Générons du code…

Dans le menu déroulant, vous avez trois options :

Les trois options sont résumées sous l’image.
Trois options de Codegen
  • Manual/None : Cela signifie qu'Xcode ne génère aucun code pour vous.

  • Class Definition : Cela signifie qu'Xcode génère pour vous une classe Person  qui va hériter de NSManagedObject  pour être un objet de  Core Data.

  • Category/Extension : C'est à vous de créer une classe Person. Xcode va générer automatiquement une extension pour que votre classe se conforme à NSManagedObject.

Je vous propose de choisir Category/Extension. La raison, c'est qu'on préfère créer nous-même la classe. Ça nous permet de lui rajouter des propriétés et des méthodes si besoin. On laisse juste Xcode étendre notre classe pour lui ajouter les fonctionnalités liées à Core Data.

Je vous invite donc à choisir Category/Extension. Et Xcode génère pour vous le code suivant :

// Person+CoreDataProperties.swift
import CoreData
extension Person {
   @nonobjcpublic class func fetchRequest() -> NSFetchRequest<Person> {
      return NSFetchRequest<Person>(entityName: "Person")
   }
   @NSManagedpublic var name: String?
}

On retrouve notre propriété name de type String?. Elle est précédée par la mention @NSManaged  qui permet à Xcode de faire le lien avec l'attribut de votre entité.

Et il y a une deuxième méthode, fetchRequest, qui retourne un objet de type NSFetchRequestNSFetchRequest  est la classe qui permet au contexte de réclamer des objets à la base de données. Cette méthode vous permet donc d'obtenir une instance de NSFetchRequest, dédiée à la récupération d'objets Person.

Créez la classe Person

Pour faire fonctionner cette extension, il nous faut créer notre classe Person. Donc je vous laisse faire ça dans le modèle en ajoutant un fichier Person.swift.

Pour que Person  soit un objet au sens de Core Data, il doit hériter de la classe NSManagedObject  :

import CoreData
class Person: NSManagedObject {
}

Et voilà ! Votre première entité est parfaitement fonctionnelle !

Évitez des ennuis

Enfin, un petit bug d'Xcode peut intervenir si vous ne précisez pas le module dans lequel évolue l'entité.

En attendant qu'Apple se penche sur la question, vous pouvez empêcher ça très facilement en indiquant Current Product Module comme valeur du réglage Module dans l'inspecteur de modèle de données.

Cliquez sur l’entité, puis sélectionnez le troisième bouton dans la section à droite. Depuis le menu déroulant de Module, sélectionnez Current Product Module.
Et plus de bug !

En résumé

  • On ajoute des entités et des attributs dans le fichier xcdatamodeld  en utilisant les boutons Add Entity et Add Attribute.

  • On peut préciser le nom de notre entité et le nom et le type d'un attribut.

  • Xcode génère automatiquement le code correspondant au modèle défini dans le fichier  xcdatamodeld  . C'est grâce à cela qu'on peut utiliser nos objets de la base de données comme des objets Swift classiques.

  • Pour cela, nos classes doivent hériter de NSManagedObject.

Dans le prochain chapitre, nous allons apprendre à créer et sauvegarder nos objets !

Exemple de certificat de réussite
Exemple de certificat de réussite