• 12 hours
  • Hard

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 3/22/24

Sauvegardez votre premier objet

Vous savez de quoi j'ai envie ? Je crois que j'ai bien envie de sauvegarder notre tout premier objet avec Core Data ! Et comme le monde est bien fait, c'est précisément ce que nous allons faire dans ce chapitre !

On t'a connu plus en forme sur les introductions de chapitre...

Peut-être... mais c'est assez désobligeant de le faire remarquer !

Bref, dans notre PeopleViewController  , lors de l'appui sur le bouton Terminé du clavier, on ne sauvegarde pas encore les participants.

C'est bientôt de l'histoire ancienne !

Préparez le terrain

Lorsqu'on appuie sur le bouton Terminé du clavier, cela appelle la méthode addPerson  de PeopleViewController  que voici :

private func addPerson() {
        guard
            let personName = peopleTextField.text,
            var people = peopleTextView.text
        else { return }

        people += personName + "\n"
        peopleTextView.text = people
        peopleTextField.text = ""

        // TODO: Save person
    }
Le bouton Terminé, tout en bas à droite du clavier
Terminé !

Cette méthode fait deux choses :

  1. Elle récupère les données du champ de texte et de la Text View.

  2. Elle rajoute le nom du nouveau participant à la liste des précédents dans la Text View.

Et elle va bientôt en faire une troisième. Nous allons sauvegarder notre nouveau participant dans la base de données à la place de notre commentaire TODO. Je vous propose qu'on fasse ça dans une méthode savePerson  à part :

private func addPerson() {
   // (...)
   savePerson(named: personName)
}
private func savePerson(named name: String) {
}

Maintenant, nous allons créer notre nouvel objet Person  . Il s'agit tout simplement de créer une instance de la classe Person  .

Analysez le contexte pour créer un objet pertinent

Seulement, souvenez-vous que pour manipuler des objets de Core Data, il nous faut un contexte. On va du coup préciser le contexte avec lequel on souhaite créer cet objet lors de l'initialisation.

Person  hérite NSManagedObject  qui admet l'initialiseur suivant :

init(context: NSManagedObjectContext)

OK, mais on va utiliser quoi comme contexte ?

Lorsqu'on a installé Core Data, on a récupéré un contexte de notre persistentContainer  via la propriété viewContext  . On en avait fait une propriété static  dans CoreDataStack  de façon à pouvoir récupérer notre contexte en écrivant simplement :

CoreDataStack.sharedInstance.viewContext

C'est ce contexte que l'on va utiliser.

Créez l'objet Person

On a l'initialiseur, on a la valeur à lui passer, let's go !

private func savePerson(named name: String) {
    // create entity instance with context
    let person = Person(context: CoreDataStack.sharedInstance.viewContext)
}

Ça y est ! J'ai un objet Person  qui a été ajouté dans mon contexte. Maintenant, je peux le manipuler comme n'importe quel objet Swift. Par exemple, pour donner une valeur à son attribut name  , j'écris tout simplement :

private func savePerson(named name: String) {
    // create entity instance with context
    let person = Person(context: CoreDataStack.sharedInstance.viewContext)
    // use
    person.name = name
}

Et voilà ! Sans plus de difficultés, on a créé notre premier objet Core Data.

Sauvegardez le contexte

Souvenez-vous, le contexte est un bloc-notes intelligent qui va noter tous les ajouts / suppressions / modifications d'objet.

Donc pour que notre objet person  soit effectivement ajouté dans la base de données, il faut sauvegarder le contexte. Et cela se fait très facilement avec la méthode save de NSManagedObjectContext  :

private func savePerson(named name: String) {
    // create entity instance with context
    let person = Person(context: CoreDataStack.sharedInstance.viewContext)
    // use
    person.name = name
    CoreDataStack.sharedInstance.viewContext.save()
}

Il se trouve que la méthode save  peut renvoyer une erreur. Donc il faut l'utiliser avec try?  .

try? CoreDataStack.sharedInstance.viewContext.save()

Vous pouvez aussi utiliser do/catch  pour gérer les erreurs et afficher une alerte à l'utilisateur au cas où la sauvegarde échoue. Mais je vous fais confiance pour réussir à faire ça sans moi.

Et voilà ! Il suffit de trois lignes pour créer un objet dans le contexte, modifier ses propriétés et sauvegarder le contexte avec notre nouvel objet.

En résumé

Pour sauvegarder un objet :

  • On crée une instance de la classe désirée en lui passant le contexte lors de l'initialisation.

  • On manipule les propriétés comme n'importe quel objet Swift.

  • On sauvegarde le contexte.

Dans le prochain chapitre, on va apprendre à récupérer les données sauvegardées avec Core Data !

Example of certificate of achievement
Example of certificate of achievement