Core Data (CRUD) mit Swift 4.2 für Anfänger
Core Data ist ein Objektdiagramm- und Persistenzframework, das von Apple in den Betriebssystemen macOS und iOS bereitgestellt wird. Es wurde in Mac OS X 10.4 Tiger und iOS mit iPhone SDK 3.0 eingeführt. Es ermöglicht die Serialisierung von Daten, die vom relationalen Entitätsattributmodell organisiert werden, in XML-, Binär- oder SQLite-Speicher.
Entwickler, die neu in Core Data sind, werden oft durch die Unterschiede zwischen SQLite und Core Data verwirrt. Wenn Sie sich fragen, ob Sie SQLite oder Core Data benötigen, stellen Sie die falsche Frage. Denken Sie daran, dass Core Data keine Datenbank ist.
SQLite:
- Verfügen über Dateneinschränkungen.
- Arbeitet mit Daten, auf der Festplatte gespeichert.
- Kann Tabellen löschen und Daten bearbeiten, ohne sie in den Speicher zu laden.
- Langsam im Vergleich zu Core Data.
Kerndaten:
- Haben Sie keine Datenbeschränkungen, falls erforderlich, müssen Sie diese nach Geschäftslogik implementieren.
- Arbeitet im Speicher.(daten müssen von der Festplatte in den Speicher geladen werden)
- Müssen ganze Daten laden, wenn wir Tabelle löschen oder aktualisieren müssen.
- Schnell in Bezug auf die Erstellung von Datensätzen.(das Speichern kann zeitaufwändig sein)
Zusätzlich abgesehen von SQLite als Back-End-Core-Daten können XML-oder Binärformat zum Speichern von Daten auf der Festplatte verwenden.
Core Data-Einschränkungen
Obwohl Core Data ein fantastisches Framework ist, gibt es mehrere Nachteile. Diese Nachteile stehen in direktem Zusammenhang mit der Art des Frameworks und seiner Funktionsweise.
Core Data kann nur zaubern, weil es das Objektdiagramm, das es verwaltet, im Speicher hält. Dies bedeutet, dass Datensätze nur dann bearbeitet werden können, wenn sie sich im Speicher befinden. Dies unterscheidet sich stark von der Durchführung einer SQL-Abfrage in einer Datenbank. Wenn Sie Tausende von Datensätzen löschen möchten, muss Core Data zuerst jeden Datensatz in den Speicher laden. Es versteht sich von selbst, dass dies zu Speicher- und Leistungsproblemen führt, wenn dies falsch gemacht wird.
Eine weitere wichtige Einschränkung ist das Threading-Modell von Core Data. Das Framework erwartet, auf einem einzelnen Thread ausgeführt zu werden. Glücklicherweise hat sich Core Data im Laufe der Jahre dramatisch weiterentwickelt und das Framework hat verschiedene Lösungen eingeführt, um die Arbeit mit Core Data in einer Multithread-Umgebung sicherer und einfacher zu machen.
Core Data eignet sich hervorragend für Anwendungen, die ein komplexes Objektdiagramm verwalten müssen. Wenn Sie nur eine Handvoll nicht verwandter Objekte speichern müssen, ist es möglicherweise besser, eine leichtgewichtige Lösung oder das Benutzerstandardsystem zu verwenden.
Core Data Demo (Erstellen, Abrufen, Aktualisieren und Löschen)
Um die Grundlagen der Core Data zu demonstrieren, erstellen wir eine iOS-App mit Einzelansicht und ausgewähltem Core Data-Modul.
Zuerst erstellen wir ein neues Projekt und wählen „Use Core Data“. Obwohl Sie dieses Framework für Ihr vorhandenes Projekt hinzufügen können, ist es einfacher, es von diesem Ort aus hinzuzufügen, da alles bereits für Sie verkabelt ist.Sobald das Projekt erstellt wurde, sehen Sie eine Datei wie CoreDataTest.xcdatamodeld hinzugefügt.
Wenn Sie darauf klicken, sehen Sie ein Tool, mit dem Sie Entitäten konfigurieren können, die Datenmodelle darstellen. Sie können dort einige Dinge für jede Entität definieren, aber für uns sind Attribute und Beziehungen am wichtigsten.
Jetzt haben wir ein Demo-Projekt mit Core Data-Unterstützung erstellt. Es gibt zwei bemerkenswerte Änderungen in dieser Xcode-Vorlage, die wir leicht beobachten können:
- Die neue Datei CoreDataCRUD.xcdatamodeld
- Das AppDelegate.swift-Datei mit Core Data Stack-Code
Core Data Stack
Der Core Data Stack-Code im AppDelegate.swift hat eine klare Dokumentation in Form von Kommentaren, aber kurz gesagt, es richtet den persistentContainer ein und speichert die Daten, wenn sich Änderungen ergeben. Da AppDelegate die erste Datei ist, die ausgeführt wird, sobald die App gestartet wird, können wir den Kontext aus dem Core Data Stack speichern und abrufen.
Nun, da wir unsere Daten in der Benutzerentität modelliert haben. Es ist Zeit, einige Datensätze hinzuzufügen und in den CoreData
zu speichern.swift
Datensätze zu Kerndaten erstellen
Das Hinzufügen der Datensätze zu Kerndaten hat folgende Aufgaben
- Beziehen Sie sich auf persistentContainer von appdelegate
- Erstellen Sie den Kontext aus persistentContainer
- Erstellen Sie eine Entität mit Benutzer
- Erstellen Sie einen neuen Datensatz mit 5126>
- Werte für die Datensätze für jeden Schlüssel festlegen
Daten abrufen
Der Prozess das Abrufen der gespeicherten Daten ist ebenfalls sehr einfach. Es hat die folgende Aufgabe
- Bereiten Sie die Anforderung vom Typ NSFetchRequest für die Entität (Benutzer in unserem Beispiel) vor
- Verwenden Sie bei Bedarf ein Prädikat für Filterdaten
- Holen Sie das Ergebnis aus dem Kontext in Form eines Arrays von
- Iterieren Sie durch ein Array, um den Wert für den spezifischen Schlüssel zu erhalten
daten von unserer Benutzerentität unter Verwendung des folgenden Codes.
Daten aktualisieren
Für den Aktualisierungsdatensatz müssen wir zuerst Daten mit dem Prädikat wie oben abrufen / abrufen. Dann unten einige Schritte zu folgen
- Bereiten Sie die Anfrage mit Prädikat für die Entität (Benutzer in unserem Beispiel) vor
- Datensatz abrufen und neuen Wert mit Schlüssel festlegen
- Und Zuletzt Kontext speichern wie Daten erstellen.
Delete Data
Für delete record müssen wir zuerst das Objekt finden, das wir mit fetchRequest löschen möchten. befolgen Sie dann die folgenden Schritte zum Löschen des Datensatzes
- Bereiten Sie die Anforderung mit dem Prädikat für die Entität (Benutzer in unserem Beispiel)
- Fetch record vor, die wir löschen möchten
- Und Kontext erstellen.delete(object) call (ref Bild unten angehängt)
Nun, das ist nicht genug für Core Data, es gibt viele komplexe Dinge, die wir mit Core Data tun können, um Datenänderungen zu verfolgen, Prädikate und komplexe Beziehungen von Datenbanken hinzuzufügen. Wenn Sie mehr Kerndaten verwenden, werden die Dinge komplexer.