Beginnend mit Kerndaten! Schwierig in einfachen Worten

Viele Themen wurden bereits mit Core Data geschrieben, aber die meisten dieser Artikel sind in englischer Sprache verfasst und verwenden viele „intelligente“ Wörter, die Anfänger verwirren können.

In diesem Artikel werde ich versuchen, über dieses Framework von Apple in einer verständlichen Sprache zu sprechen, damit selbst die "kleinsten" Programmierer Informationen für sich selbst herausholen und das Mindestmaß an Wissen erhalten, das ihnen auch bei ihren Projekten hilft.

Kleines offtopic


Core Data ist ein sehr leistungsfähiges Tool, mit dem Sie Daten in Ihrer Anwendung speichern und später verwenden können. In diesem Artikel werde ich NICHT über das Arbeiten mit mehreren Kontexten mit anschließender Synchronisierung, das Lösen von Migrationsproblemen und verschiedene erweiterte Funktionen sprechen.

Die Zielgruppe dieses Artikels sind Personen, die im Allgemeinen keine Erfahrung mit Core Data hatten.

Nun ... Fangen wir an!


Um zu beginnen, müssen Sie die .xcdatamodeld-Datei selbst erstellen. Nachdem Sie sie geöffnet haben, wird am unteren Bildschirmrand die Schaltfläche "Entität hinzufügen" angezeigt. Durch Klicken darauf wird Ihr Objektmodell erstellt:



Und jetzt genauer:

  1. Ihre Entität. Sie können sich Entity als Ihre Datenstruktur vorstellen, die von einer bestimmten Klasse - NSManagedObject - vererbt wird und auch bestimmte Felder zum Schreiben von Daten enthält, dazu später mehr.
  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. Codegen-Feld. Kurz gesagt, dieses Feld gibt an, wer die Erstellung von NSManagedObject-Klassen regelt. Wählen Sie zur Vereinfachung der Bedienung Manuell / Keine aus , und Core Data kann die erforderlichen Klassen für Ihre Entität selbst erstellen. Darüber unten.

Verwenden Sie zum Erstellen unserer Entitätsklasse

Folgendes : Editor> NSManagedObject-Unterklasse erstellen.



Wenn Sie Standardwerte für Ihre Attribute festlegen möchten, verwenden Sie die folgende Methode:

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

Arbeiten Sie mit NSManagedObjectContext und PersistentStoreCoordinator


Kerndatenstapelhierarchie:



In einfachen Worten werden alle Ihre Entitäten im obigen Diagramm als verwaltete Objekte angezeigt. Alle unsere verwalteten Objekte werden in NSManagedObjectContext gespeichert. Kontext Es bezieht sich auf den NSPersistentStoreCoordinator, der Ihre gespeicherten Daten nach dem Zugriff auf SQL als Zeilencache speichert. Dies ist derzeit jedoch nicht der Fall.

Um eine Instanz Ihres ManagedObject (Entity) zu erstellen, müssen Sie auf Ihren NSPersistentContainer verweisen, der ein Wrapper für Ihren NSPersistentStoreCoordinator ist.

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
  }()

Als nächstes müssen wir über unseren PersistentContainer auf den NSManagedObjectContext zugreifen:

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

Jetzt können wir eine Instanz unseres ManageObject aus unserem Kontext erstellen und ihm einen Wert zuweisen:

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

Objekt speichern


Zum Speichern verwenden wir eine einfache Funktion:

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

In der obigen Methode überprüfen wir unseren Kontext auf Änderungen und speichern diese, falls vorhanden. Im Fehlerfall wird die Methode ausgeführt:

context.rollback()

rollback()
Die Methode bringt unseren Kontext in den ursprünglichen Zustand zurück und bricht alle Änderungen ab, die daran vorgenommen wurden.

Objekt löschen

context.delete(object)

Ermöglicht das einfache Entfernen eines Objekts aus den Kerndaten.
HINWEIS: Damit die Änderungen wirksam werden, muss der Kontext gespeichert werden, da sonst nicht alle Änderungen gespeichert werden.
context.save()

Alle Objekte abrufen


Um ein Array unserer Objekte aus Core Data abzurufen, müssen wir NSFetchRequest ausführen. Ich werde nicht tief in die volle Leistungsfähigkeit von FetchRequest eintauchen, da dieser Artikel für Anfänger gedacht ist.

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

Unter der Haube macht NSFetchRequest einen tollen Job:

  1. NSFetchRequest wechselt zum Persistent Store Coordinator
  2. Der Persistent Store Coordinator sendet eine Anfrage an den Persistent Store
  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

ANMERKUNG: Während der NSFetchRequest Managed Object Context ausgeführt wird und der Persistent Store Coordinator in einer synchronen Warteschlange ausgeführt wird, werden alle Prozesse blockiert, während ein anderer Prozess ausgeführt wird.

Fazit


In diesem Artikel habe ich die Mindestinformationen beschrieben, die meiner Meinung nach für die Arbeit mit Core Data erforderlich sind.

Jetzt können Sie Ihre eigenen Datenmodelle erstellen, speichern, löschen und abrufen.

Wenn Sie an einem fortgeschritteneren Thema über die Arbeit mit Kerndaten und interessanten Tipps interessiert sind, schreiben Sie in die Kommentare und ich werde herausfinden, was dagegen getan werden kann. Viel Spaß beim Codieren!

All Articles