Commencer avec Core Data! Difficile avec des mots simples

De nombreux sujets ont déjà été écrits avec Core Data, mais la plupart de ces articles sont en anglais, ainsi qu'en utilisant beaucoup de mots «intelligents» qui peuvent dérouter les débutants.

Dans cet article, je vais essayer de parler de ce cadre d'Apple dans un langage comprĂ©hensible afin que mĂȘme les "plus petits" programmeurs puissent obtenir des informations pour eux-mĂȘmes et obtenir le minimum de connaissances qui les aideront dans leurs projets.

Petit hors-sujet


Core Data est un outil trÚs puissant qui vous permet d'enregistrer des données dans votre application et de les utiliser plus tard. Dans cet article, je ne parlerai PAS de travailler avec plusieurs contextes avec une synchronisation ultérieure, comment résoudre les problÚmes de migration et diverses fonctionnalités avancées.

Le public cible de cet article est constitué de personnes n'ayant généralement aucune expérience avec Core Data.

Eh bien ... Commençons!


Pour commencer, vous devez crĂ©er le fichier .xcdatamodeld lui-mĂȘme, aprĂšs l'avoir ouvert, au bas de l'Ă©cran, vous verrez le bouton "Ajouter une entitĂ©". En cliquant dessus, votre modĂšle d'objet sera crĂ©Ă©:



Et maintenant, plus en détail:

  1. Votre entité. Vous pouvez considérer Entity comme votre structure de données, qui a l'héritage d'une certaine classe - NSManagedObject, et aura également certains champs pour écrire des données, plus à ce sujet plus tard.
  2. Attributes. Entity . + . :
    • Integer 16/32/64 — . , . Int, .
      : Integer16(15)
    • Decimal/Double/Float — . , .
    • String — .
    • Boolean — .
    • Date — Date.
      NOTE: Core Data 00:00:00 UTC 1 1970 .
    • Binary Data — Data
      NOTE: Allow External Storage. Core Data , 100 , Core Data . .
    • UUID — UUID.
    • URI — URL
    • Transformable — , NSCoding.

  3. Relationship. Entity. Relationships :

    1. One-to-One
    2. One-to-Many
    3. Many-to-Many

    Relationships.

    3 Entities, Andrey, Home, Car.

    • — One-to-One Relationship.
    • 1, 2 — One-to-Many Relationship.
    • Many-to-Many Relationship . .
  4. Entity
  5. Champ Codegen. En bref, ce champ indique qui rĂ©gira la crĂ©ation des classes NSManagedObject. Pour une facilitĂ© d'utilisation, sĂ©lectionnez Manuel / Aucun , puis Core Data pourra crĂ©er les classes nĂ©cessaires pour votre entitĂ© elle-mĂȘme. À ce sujet ci-dessous.

Pour créer notre classe Entity, utilisez:

Editor> Create NSManagedObject Subclass.



Si vous souhaitez définir des valeurs par défaut pour vos attributs, utilisez la méthode:

public override func awakeFromInsert() {
        super.awakeFromInsert()
        date = Date()
}

Travailler avec NSManagedObjectContext et PersistentStoreCoordinator


Hiérarchie de la pile de données de base:



en termes simples, toutes vos entités sont affichées en tant qu'objets gérés dans le diagramme ci-dessus. Tous nos objets gérés sont stockés dans NSManagedObjectContext. Contexte Il fait référence au NSPersistentStoreCoordinator qui stocke vos données enregistrées sous forme de cache de lignes aprÚs avoir accédé à SQL, mais ce n'est plus le cas actuellement.

Pour créer une instance de votre ManagedObject (Entity), vous devez vous référer à votre NSPersistentContainer qui est un wrapper pour votre NSPersistentStoreCoordinator.

var persistentContainer: NSPersistentContainer = {
      let container = NSPersistentContainer(name: "SavingLearn")
      container.loadPersistentStores(completionHandler: { (storeDescription, error) in
          if let error = error as NSError? {
              fatalError("Unresolved error \(error), \(error.userInfo)")
          }
      })
      return container
  }()

Ensuite, nous devons accéder à NSManagedObjectContext via notre PersistentContainer:

var context: NSManagedObjectContext = {
    return persistentContainer.viewContext
  }()

Nous pouvons maintenant créer une instance de notre ManageObject à partir de notre contexte et lui affecter une valeur:

var person = Person(context: context)
person.age = 32

Enregistrement d'un objet


Pour Ă©conomiser, nous utilisons une fonction simple:

func saveContext () {
      if context.hasChanges {
          do {
              try context.save()
          } catch {
            context.rollback()
              let nserror = error as NSError
              fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
          }
      }
  }

Dans la méthode ci-dessus, nous vérifions notre contexte pour les changements et s'ils sont présents, nous faisons une sauvegarde. En cas d'erreur, la méthode est exécutée:

context.rollback()

rollback()
La méthode ramÚne notre contexte à son état d'origine et annule toutes les modifications qui y ont été apportées.

Supprimer un objet

context.delete(object)

Nous permet de supprimer facilement un objet de Core Data.
REMARQUE: pour que les modifications prennent effet, il est nécessaire d'enregistrer le contexte, sinon toutes les modifications ne seront pas enregistrées.
context.save()

Récupération de tous les objets


Afin d'obtenir un tableau de nos objets à partir de Core Data, nous devons effectuer NSFetchRequest. Je n'entrerai pas profondément dans la pleine puissance de FetchRequest puisque cet article est conçu pour les débutants.

let fetchRequest: NSFetchRequest<Person> = Person.fetchRequest()
let objects = try context.fetch(fetchRequest)

Sous le capot, NSFetchRequest fait un excellent travail:

  1. NSFetchRequest va au coordinateur de magasin persistant
  2. Le coordinateur du magasin persistant envoie une demande au magasin persistant
  3. Persistent Store SQL
  4. SQL . ID Row Value. Row Value Persistent Store Row Cache ID.
  5. Persistent Store Managed Objects ID Persistent Store Coordinator. fault () . Managed Object Context ID, Core Data SQL.
  6. Persistent Store Coordinator context Managed Object
  7. Core Data .
    includePendingChanges = false
  8. NSManagedObject

REMARQUE: pendant que le contexte d'objet géré NSFetchRequest est en cours d'exécution et que le coordinateur de magasin persistant s'exécute dans une file d'attente synchrone, tous les processus sont bloqués pendant qu'un autre processus est en cours d'exécution.

Conclusion


Dans cet article, j'ai décrit les informations minimales nécessaires pour travailler avec Core Data à mon avis.

Vous pouvez maintenant créer vos propres modÚles de données, les enregistrer, les supprimer et les récupérer.

Si vous ĂȘtes intĂ©ressĂ© par un sujet plus «avancé» sur l'utilisation de Core Data et des conseils intĂ©ressants, Ă©crivez dans les commentaires et je trouverai ce qui peut ĂȘtre fait Ă  ce sujet. Bon codage!

All Articles