Core Data (CRUD) avec Swift 4.2 pour les débutants

Core Data est un framework de graphique d’objets et de persistance fourni par Apple dans les systèmes d’exploitation macOS et iOS. Il a été introduit dans Mac OS X 10.4 Tiger et iOS avec le SDK iPhone 3.0. Il permet de sérialiser les données organisées par le modèle entité–attribut relationnel dans des magasins XML, binaires ou SQLite.

Les développeurs débutants dans Core Data sont souvent confus par les différences entre SQLite et Core Data. Si vous vous demandez si vous avez besoin de SQLite ou de Core Data, vous posez la mauvaise question. N’oubliez pas que Core Data n’est pas une base de données.

SQLite:

  • Avoir une fonctionnalité de contraintes de données.
  • Fonctionne sur des données stockées sur disque.
  • Peut supprimer la table et modifier les données sans les charger en mémoire.
  • Lent par rapport aux données de base.

Données de base:

  • N’ont pas de contraintes de données, si nécessaire, doivent être implémentées par une logique métier.
  • Fonctionne en mémoire.(les données doivent être chargées du disque vers la mémoire)
  • Doivent charger des données entières si nous devons supprimer la table ou mettre à jour.
  • Rapide en termes de création d’enregistrements.(les sauver peut prendre du temps)

De plus, en dehors de SQLite, les données de base back-end peuvent utiliser un format XML ou binaire pour stocker des données sur le disque.

Limites des données de base

Même si les données de base sont un cadre fantastique, il existe plusieurs inconvénients. Ces inconvénients sont directement liés à la nature du cadre et à son fonctionnement.

Core Data ne peut faire que sa magie car elle conserve le graphique d’objets qu’elle gère en mémoire. Cela signifie qu’il ne peut fonctionner sur les enregistrements qu’une fois qu’ils sont en mémoire. Ceci est très différent de l’exécution d’une requête SQL sur une base de données. Si vous souhaitez supprimer des milliers d’enregistrements, Core Data doit d’abord charger chaque enregistrement en mémoire. Il va sans dire que cela entraîne des problèmes de mémoire et de performances s’il est mal fait.

Une autre limitation importante est le modèle de threading des données de base. Le framework s’attend à être exécuté sur un seul thread. Heureusement, les données de base ont considérablement évolué au fil des ans et le cadre a mis en place diverses solutions pour rendre le travail avec les données de base dans un environnement multithread plus sûr et plus facile.

Pour les applications qui ont besoin de gérer un graphique d’objet complexe, Core Data convient parfaitement. Si vous n’avez besoin que de stocker une poignée d’objets non liés, vous feriez peut-être mieux avec une solution légère ou le système par défaut de l’utilisateur.

Démo de données de base (Créer, Récupérer, Mettre à jour et Supprimer)

Afin de démontrer les bases des données de base, créons une application iOS à vue unique avec le module de données de base sélectionné.

Créer un projet avec Use Core Data

Tout d’abord, créons un nouveau projet et sélectionnons « Use Core Data ». Bien que vous puissiez ajouter ce framework pour votre projet existant, il est plus facile de l’ajouter à partir de cet endroit car tout sera déjà câblé pour vous.Une fois le projet créé, vous verrez un fichier comme CoreDataTest.xcdatamodeld ajouté.

Lorsque vous cliquez dessus, vous verrez un outil qui vous permet de configurer des entités qui représentent des modèles de données. Vous pouvez définir peu de choses pour chaque entité, mais pour nous, les attributs et les relations seront les plus importants.

Ajouter une Entité

Configurer le Nom et les attributs de l’entité

Maintenant que nous avons créé un projet de démonstration avec le support de Core Data. Il y a deux changements notables dans ce modèle Xcode que nous pouvons facilement observer qui sont

  • Le nouveau fichier CoreDataCRUD.xcdatamodèle
  • La délégation de l’AppLication.fichier swift avec code de pile de données de base

Pile de données de base AppDelegate

Pile de données de base

Le code de la Pile de données de base dans AppDelegate.swift a une documentation claire sous forme de commentaires, mais en bref, il a configuré persistentContainer et enregistre les données s’il y a des modifications. Comme AppDelegate est le premier fichier qui s’exécute dès le lancement de l’application, nous pouvons enregistrer et récupérer le contexte de la pile de données principale.
Maintenant que nous avons modélisé nos données dans l’entité utilisateur. Il est temps d’ajouter des enregistrements et de les enregistrer dans le CoreData

Commencez par importer des CoreData dans notre viewcontroller.swift

Créer des enregistrements dans les données de base

Le processus d’ajout des enregistrements aux données de base comporte les tâches suivantes

  • Se référer à persistentContainer de appdelegate
  • Créer le contexte à partir de persistentContainer
  • Créer une entité avec l’utilisateur
  • Créer un nouvel enregistrement avec cette Entité utilisateur
  • Définir des valeurs pour les enregistrements de chaque clé

créer des enregistrements via la boucle for pour créer plusieurs enregistrements de test

Récupérer des données

Le processus de récupérer les données enregistrées est également très facile. Il a la tâche suivante

  • Préparer la requête de type NSFetchRequest pour l’entité (Utilisateur dans notre exemple)
  • si nécessaire, utiliser le prédicat pour les données de filtre
  • Récupérer le résultat du contexte sous la forme d’un tableau de
  • Parcourir un tableau pour obtenir une valeur pour la clé spécifique

Nous pouvons récupérer le résultat du contexte sous la forme données de notre entité utilisateurs utilisant le code suivant.

Données de mise à jour

Pour l’enregistrement de mise à jour, nous devons d’abord récupérer / Récupérer des données avec le prédicat identique au processus de récupération de données ci-dessus. Ensuite, ci-dessous quelques étapes à suivre

  • Préparez la requête avec le prédicat pour l’entité (Utilisateur dans notre exemple)
  • Récupérez l’enregistrement et Définissez une nouvelle valeur avec la clé
  • Et Enregistrez le dernier contexte identique à créer des données.

ici, dans l’exemple ci-dessus, remplacez « Ankur1 » par « newName »

Supprimer les données

Pour supprimer l’enregistrement, nous devons d’abord trouver l’objet que nous voulons supprimer par fetchRequest. suivez ensuite quelques étapes ci-dessous pour supprimer l’enregistrement

  • Préparez la requête avec le prédicat pour l’entité (Utilisateur dans notre exemple)
  • Récupérer l’enregistrement et que nous voulons supprimer
  • Et créer un contexte.supprimer (objet) appel (image de référence ci-dessous)

dans cette méthode, nous récupérons l’enregistrement avec le nom d’utilisateur est « Ankur3 » et supprimons cet enregistrement et l’enregistrons.

Eh bien, cela ne suffit pas pour les données de base, il y a beaucoup de choses complexes que nous pouvons faire avec le suivi des modifications des données de base, l’ajout de prédicats et de relations complexes de bases de données. À mesure que vous utilisez plus de données de base, les choses deviennent plus complexes.