SCours SwiftUI
Fiche 09.04

Fiche 09.04 — Core Data essentiel

Objectif

Comprendre les bases de Core Data pour stocker des données locales complexes ou offline.

Le but n’est pas de devenir expert Core Data, mais de savoir lire, expliquer et utiliser les opérations principales.

1. Pourquoi Core Data ?

Core Data sert à stocker localement des objets structurés.

Exemples :

  • favoris ;
  • historique ;
  • cache offline ;
  • notes ;
  • messages ;
  • objets liés entre eux.

Contrairement à UserDefaults, Core Data est fait pour gérer beaucoup d’objets, les filtrer, les trier et les modifier.

2. Les mots importants

Texte
Entity → type d’objet stocké, par exemple FavoriteArticle Attribute → propriété, par exemple title ou createdAt Context → espace de travail pour lire/modifier les données Fetch → requête pour récupérer des objets Save → sauvegarde des changements

3. Exemple d’entité

Dans le modèle Core Data, on pourrait avoir :

Texte
FavoriteArticle - id: String - title: String - url: String - createdAt: Date

Dans le code, Xcode peut générer une classe FavoriteArticle ou tu peux avoir une classe NSManagedObject.

4. Container Core Data simple

Swift
import CoreData final class CoreDataStack { static let shared = CoreDataStack() let container: NSPersistentContainer private init() { container = NSPersistentContainer(name: "AppModel") container.loadPersistentStores { _, error in if let error { fatalError("Core Data error: \(error)") } } } var context: NSManagedObjectContext { container.viewContext } func save() { guard context.hasChanges else { return } try? context.save() } }

Dans une vraie app, on évite parfois le singleton direct et on injecte le stack/service.

5. Ajouter un favori

Swift
final class FavoriteArticleService { private let context: NSManagedObjectContext init(context: NSManagedObjectContext = CoreDataStack.shared.context) { self.context = context } func addFavorite(id: String, title: String, url: String) { let favorite = FavoriteArticle(context: context) favorite.id = id favorite.title = title favorite.url = url favorite.createdAt = Date() try? context.save() } }

Le principe est : créer un objet dans le contexte, remplir ses propriétés, sauvegarder.

6. Récupérer les favoris

Swift
func fetchFavorites() -> [FavoriteArticle] { let request = FavoriteArticle.fetchRequest() request.sortDescriptors = [ NSSortDescriptor(key: "createdAt", ascending: false) ] return (try? context.fetch(request)) ?? [] }

Tu peux ajouter des filtres avec NSPredicate.

Swift
request.predicate = NSPredicate(format: "id == %@", articleId)

7. Supprimer un favori

Swift
func deleteFavorite(_ favorite: FavoriteArticle) { context.delete(favorite) try? context.save() }

8. Utilisation SwiftUI simple

Tu peux charger les favoris dans un ViewModel.

Swift
@MainActor final class FavoritesViewModel: ObservableObject { @Published var favorites: [FavoriteArticle] = [] private let service = FavoriteArticleService() func loadFavorites() { favorites = service.fetchFavorites() } func delete(_ favorite: FavoriteArticle) { service.deleteFavorite(favorite) loadFavorites() } }

Points à connaître

Core Data n’est pas juste une base SQL simple. C’est un framework de gestion d’objets persistants.

Pour ton objectif, il faut surtout savoir : créer une entité, insérer, fetch, update, delete, sauvegarder le contexte.

Résumé

  • Core Data sert aux données locales complexes.
  • Les notions clés sont Entity, Attribute, Context, Fetch et Save.
  • Les opérations essentielles sont CRUD : create, read, update, delete.
  • En SwiftUI, on peut passer par un service et un ViewModel.
  • SwiftData est plus récent, mais Core Data reste important dans les projets existants.