Introduction
Dans mon dernier article, nous avons vu comment ajouter des interactions utilisateur avec SwiftUI pour rendre les applications iOS plus dynamiques. Maintenant, nous allons aller encore plus loin en intégrant Core Data pour stocker et gérer les données utilisateur de manière persistante.
Core Data est un framework puissant qui permet aux applications iOS de sauvegarder des informations localement, même après leur fermeture. Contrairement aux solutions plus simples comme UserDefaults
, Core Data offre une gestion avancée des objets, un suivi des changements, ainsi que la capacité à gérer des relations complexes entre les données.
Dans cet article, nous allons voir comment :
- Configurer Core Data dans un projet Xcode
- Créer et manipuler une base de données locale
- Utiliser Core Data avec SwiftUI pour créer, afficher et supprimer des données
- Optimiser les performances de Core Data
1. Configuration de Core Data dans Xcode
Si tu crées un nouveau projet, voici comment activer Core Data :
- Ouvrir Xcode et cliquer sur "Create a new Xcode project".
- Sélectionner SwiftUI comme interface utilisateur.
- Cocher l’option Use Core Data avant de valider.
Si tu as déjà un projet existant, tu peux ajouter Core Data manuellement :
-
Créer un fichier
.xcdatamodeld
: Ce fichier représente le modèle de données de ton application. -
Ajouter un
NSPersistentContainer
dans tonApp.swift
ou dans un gestionnaire de données dédié.
2. Comprendre la Structure de Core Data
Core Data repose sur plusieurs composants :
- Managed Object Model (MOM) : Définit la structure de la base de données (entités, attributs, relations).
- Persistent Store Coordinator (PSC) : Gère la connexion entre l’application et la base de données.
- Managed Object Context (MOC) : Interface qui permet de manipuler les objets et de suivre les modifications avant d’enregistrer dans la base.
- Fetch Requests : Permettent de récupérer les données stockées et de les afficher.
3. Création d’une Entité Core Data
Nous allons maintenant créer une entité pour stocker des tâches dans une liste de tâches.
-
Ouvrir le fichier
.xcdatamodeld
généré par Xcode. -
Créer une nouvelle entité nommée
Task
. -
Ajouter des attributs :
-
title
(String) → Le nom de la tâche. -
isCompleted
(Boolean) → Indique si la tâche est terminée ou non.
-
- Sauvegarder et fermer l’éditeur de modèle.
Désormais, nous avons une base de données prête à être utilisée.
4. Intégrer Core Data avec SwiftUI
Nous allons maintenant afficher et enregistrer des tâches dans SwiftUI en utilisant Core Data.
4.1 Récupérer les Données avec @FetchRequest
import SwiftUI
import CoreData
struct ContentView: View {
@Environment(\.managedObjectContext) private var viewContext
@FetchRequest(entity: Task.entity(), sortDescriptors: []) var tasks: FetchedResults<Task>
var body: some View {
NavigationView {
List {
ForEach(tasks) { task in
HStack {
Text(task.title ?? "Sans titre")
Spacer()
if task.isCompleted {
Image(systemName: "checkmark.circle.fill").foregroundColor(.green)
}
}
}
.onDelete(perform: deleteTask)
}
.navigationTitle("Mes Tâches")
.toolbar {
Button(action: addTask) {
Label("Ajouter", systemImage: "plus")
}
}
}
}
private func addTask() {
let newTask = Task(context: viewContext)
newTask.title = "Nouvelle tâche"
newTask.isCompleted = false
saveContext()
}
private func deleteTask(at offsets: IndexSet) {
offsets.map { tasks[$0] }.forEach(viewContext.delete)
saveContext()
}
private func saveContext() {
do {
try viewContext.save()
} catch {
print("Erreur lors de l'enregistrement : \(error)")
}
}
}
Explication :
-
@FetchRequest
récupère automatiquement les tâches enregistrées dans Core Data. - Le bouton
+
permet d’ajouter une nouvelle tâche. - Le swipe-to-delete supprime une tâche avec
onDelete
. -
viewContext.save()
enregistre les modifications dans la base de données.
5. Optimisation et Bonnes Pratiques
- Précharger les données : Utiliser des requêtes optimisées pour éviter les ralentissements.
- Utiliser des relations entre entités : Permet d’organiser les données plus efficacement.
-
Gérer les mises à jour : Observer les changements dans le
Managed Object Context
pour éviter les erreurs. -
Exploiter Swift Concurrency (
async/await
) pour améliorer les performances et éviter les blocages de l’interface.
6. Tester et Déboguer Core Data
- Lancer l’application sur le simulateur pour voir si l’ajout/suppression fonctionne.
- Vérifier la persistance : Fermer et rouvrir l’application pour voir si les tâches sont bien enregistrées.
- Utiliser Xcode Data Model Inspector pour explorer les données stockées.
Conclusion
Nous avons vu comment intégrer Core Data dans SwiftUI pour enregistrer et gérer des données utilisateur. Ce système permet de conserver les informations localement et d’améliorer l’expérience utilisateur.
Ce dernier article conclut ma série sur le développement iOS avec Xcode, SwiftUI et Core Data. J’espère que ces articles vous ont aidé à mieux comprendre l’univers du développement Apple !
Références
- APPLE. Apple Developer - Ressources pour développeurs [en ligne]. Apple, 2024. Disponible sur : https://developer.apple.com.
- APPLE. Créer un projet Xcode pour une application [en ligne]. Apple Developer, 2024. Disponible sur : https://developer.apple.com/documentation/xcode/creating-an-xcode-project-for-an-app
Commentaires1
Merci pour cet article fort…
Merci pour cet article fort intéressant. Cependant, j'aurais une question. Quelle est la meilleure façon d'optimiser les performances de Core Data dans une application SwiftUI?