Core Data (CRUD) met Swift 4.2 voor Beginners
Core Data is een objectgrafiek en persistence framework van Apple in de MacOS-en iOS-besturingssystemen. Het werd geïntroduceerd in Mac OS X 10.4 Tiger en iOS met iPhone SDK 3.0. Het maakt het mogelijk gegevens georganiseerd door de relationele entiteit-attribuut model te serialiseren in XML, binair, of SQLite winkels.
ontwikkelaars die nieuw zijn bij Core Data worden vaak verward door de verschillen tussen SQLite en Core Data. Als je je afvraagt of je SQLite of Core Data nodig hebt, dan stel je de verkeerde vraag. Onthoud dat kerngegevens geen database zijn.
SQLite:
- hebben gegevens beperken functie.
- werkt op gegevens die op schijf zijn opgeslagen.
- kan tabel neerzetten en gegevens bewerken zonder ze in het geheugen te laden.
- traag in vergelijking met kerngegevens.
kerngegevens:
- hebben geen gegevens beperkingen, indien nodig moet implementeren door business logic.
- werkt in het geheugen.(gegevens moeten van schijf naar geheugen worden geladen)
- moeten alle gegevens laden als we een tabel of update nodig hebben.
- snel in termen van recordcreatie.(het opslaan van hen kan tijdrovend zijn)
bovendien afgezien van SQLite als back-end Core data kan XML of binair formaat gebruiken voor het opslaan van gegevens op schijf.
Core Data Limitations
hoewel Core Data een fantastisch framework is, zijn er verschillende nadelen. Deze nadelen houden rechtstreeks verband met de aard van het kader en de werking ervan.
kerngegevens kunnen alleen zijn magie doen omdat het de objectgrafiek die het beheert in het geheugen houdt. Dit betekent dat het alleen kan werken op records als ze in het geheugen. Dit is heel anders dan het uitvoeren van een SQL query op een database. Als u duizenden records wilt verwijderen, moet de kerngegevens eerst elke record in het geheugen laden. Het spreekt vanzelf dat dit resulteert in het geheugen en de prestaties problemen als verkeerd gedaan.
een andere belangrijke beperking is het threading-model van kerngegevens. Het raamwerk verwacht te worden uitgevoerd op een enkele thread. Gelukkig is Core Data in de loop der jaren dramatisch geëvolueerd en heeft het framework verschillende oplossingen ingevoerd om het werken met Core Data in een multithreaded omgeving veiliger en gemakkelijker te maken.
voor toepassingen die een complexe objectgrafiek moeten beheren, passen kerngegevens uitstekend. Als u slechts een handvol ongerelateerde objecten op te slaan, dan kunt u beter af met een lichtgewicht oplossing of de gebruiker standaardwaarden systeem.
Core Data Demo (Create, Retrieve, Update and Delete)
om de basisprincipes van de Core Data aan te tonen, maken we single view iOS app met de Core Data module geselecteerd.
eerst maken we een nieuw project en selecteren we “Use Core Data”. Hoewel u dat framework voor uw bestaande project kunt toevoegen, is het makkelijker om het vanaf die plek toe te voegen, omdat alles al voor u is bedraad.Zodra het project is gemaakt, ziet u een bestand als CoreDataTest.xcdatamodeld toegevoegd.
wanneer u erop klikt, ziet u een hulpmiddel waarmee u entiteiten kunt configureren die datamodellen vertegenwoordigen. Je kunt er weinig dingen definiëren voor elke entiteit, maar voor ons zullen attributen en relaties het belangrijkst zijn.
Nu, we hebben een demo-project met de belangrijkste Data ondersteunen. Er zijn twee opmerkelijke veranderingen in dit Xcode template die we gemakkelijk kunnen waarnemen die
- het nieuwe bestand CoreDataCRUD zijn.xcdatamodeld
- The AppDelegate.swift-bestand met Core Data Stack code
Core Data Stack
de Core Data Stack code in de AppDelegate.swift heeft duidelijke documentatie in de vorm van opmerkingen, maar in het kort, het opzetten van de persistentContainer en slaat de gegevens op als er wijzigingen zijn. Als AppDelegate is het eerste bestand dat wordt uitgevoerd zodra app gelanceerd, kunnen we opslaan en halen de context van de kern Data Stack.
nu hebben we onze gegevens gemodelleerd in de gebruikerseenheid. Het is tijd om enkele records toe te voegen en deze op te slaan in de CoreData
begin met CoreData importeren in onze viewcontroller.swift
Records Maken tot de belangrijkste Data
Het proces van het toevoegen van de records te Core Gegevens heeft de volgende taken
- Zie persistentContainer van appdelegate
- Maak de context van persistentContainer
- het Maken van een entiteit met Gebruiker
- Maak nieuw record met deze Entiteit Gebruiker
- Stel waarden in voor de records voor elke toets
Gegevens Ophalen
Het proces van het ophalen van de opgeslagen gegevens is zeer eenvoudig ook. Het heeft de volgende taak
- het verzoek van het type NSFetchRequest voorbereiden voor de entiteit (gebruiker in ons voorbeeld)
- indien nodig gebruik predicaat voor filtergegevens
- haal het resultaat uit de context in de vorm van een array van
- Itereer door een array om waarde te krijgen voor de specifieke sleutel
we kunnen de gegevens van onze gebruikersentiteit ophalen met behulp van de volgende code.
Update Data
voor updaterecord eerst moeten we gegevens ophalen/ophalen met predicaat zoals hierboven Gegevens ophalen. Vervolgens enkele stappen om
- te volgen bereid de aanvraag voor met predicaat voor de entiteit (gebruiker in ons voorbeeld)
- haal record op en stel een nieuwe waarde in met sleutel
- en bewaar de laatste context hetzelfde als create data.
gegevens verwijderen
voor record verwijderen moeten we eerst het object vinden dat we willen verwijderen door fetchRequest. volg dan de onderstaande stappen voor record verwijderen
- bereid de aanvraag voor met predicaat voor de entiteit (gebruiker in ons voorbeeld)
- haal record op en die we willen verwijderen
- en maak context.verwijderen (object) aanroep (ref afbeelding hieronder bijgevoegd)
Nou, Dit is niet genoeg om de kern van gegevens, er zijn veel complexe dingen die we kunnen doen met core data tracking data veranderingen, het toevoegen van predicaten en complexe relaties van databases. Naarmate je meer Core Data gebruikt, worden dingen complexer.