Core Data Datamodel: Core Data Tutorial (2)

Core Data Datamodel

In deze Core Data tutorial bouwen we een app waarin de belangrijkste onderdelen van Core Data aan bod komen. Deze aflevering besteden we aandacht aan het Core Data datamodel.

Deel 1 uit deze tutorial vind je hier.

De basis van elke Core Data-app is het datamodel, in Core Data-termen ook wel object graph genoemd. De gegevens die onze app moet opslaan, worden bewaard volgens zo’n datamodel: dat datamodel bevat de structuur van de gegevens.

Heb je wel eens met een database, zoals mySQL, gewerkt? Dan ken je wellicht de term schema: de beschrijving van de structuur van de database. Het datamodel is het ‘schema’ van de Core Data-database.

In één dag Core Data leren?

In deze nieuwe LIVE Clinic over Core Data leer je in één dag hoe je zelf Core Data in je apps kunt gebruiken. Gewoon thuis, vanachter je Mac!

Meer informatie

De onderdelen van het Core Data datamodel

Een Core Data datamodel beschrijft de structuur die moet worden gebruikt om gegevens op te slaan. De twee belangrijkste onderdelen zijn entities en attributes.

Core Data: Entity

In Core Data heeft elk datamodel één of meer entities, ‘entiteiten’. Een entity beschrijft een verzameling (bij elkaar horende) gegevens. Een voorbeeld: als we een serie adressen in een Core Data-app zouden willen bijhouden, wordt elk van die adressen bewaard zoals in de entity staat beschreven.

In database-terminologie wordt een entity een tabel genoemd.

Core Data: Attribute

Een entity heeft één of meer attributes, ‘kenmerken’. Onze ‘adres’-entity kan bijvoorbeeld een kenmerk voor de straatnaam hebben, een ander kenmerk voor het huisnummer, eentje voor de postcode enzovoort. Kenmerken hebben een ‘datatype’, zoals Int64, String en Date.

Een attribute in Core Data kun je vergelijken met een tabel-kolom uit een database.

Samenvattend: door in het datamodel entities te maken en elke entity één of meer attributes te geven, ontwerp je de structuur waarin je gegevens kunnen worden opgeslagen.

Database-termen en Core Data

Als je wel eens met databases hebt gewerkt, kan het volgende overzicht je helpen:

  • Een schema heet in Core Data het datamodel.
  • Een tabel wordt in Core Data een entity genoemd.
  • Een tabelkolom heet in Core Data een attribute.
  • Een record heet in Core Data een managed object.
  • Een veld vind je in Core Data terug als een property of een ‘key/value’-combinatie.

Het datamodel van onze app

Xcode heeft een aparte editor om datamodellen te kunnen maken: de Datamodel Editor. Deze editor verschijnt automatisch als je een bestand met de extensie .xcdatamodeld opent.

Stap 0. Begin met het juiste project.

We bouwen verder aan de app waarmee we in het vorige artikel zijn begonnen:

Klik hier om naar het vorige artikel te gaan, of klik hier om de Xcode-bestanden van de app te downloaden.

Stap 1. Maak een entity: Notitie.

Selecteer, in de File Navigator, het bestand Notities.xcdatamodeld.

Het bestand met het Core Data datamodel

De Editor toont nu het (op dit moment nog lege) datamodel van onze app:

Het Core Data datamodel van onze app

We hebben één entiteit nodig om de structuur van een notitie kunnen beschrijven: Notitie. Klik op het Add Entity-icoon:

Core Data: Add Entity

Xcode voegt meteen een entiteit toe en noemt hem Entity (let op de hoofdletter):

Onze nieuwe Entity

Klik één keer op de naam Entity en verander hem in Notitie. Druk daarna op Enter.

De nieuwe naam van onze Entity: Notitie

Namen van entities beginnen altijd met een hoofdletter. De reden hiervoor wordt dadelijk al duidelijk: Xcode kan van entities automatisch classes maken.

Stap 2. Twee attributen voor titel en datum

Elke notitie in onze app heeft een titel en een datum. Nu we onze Notitie-entity hebben, kunnen we voor zowel de titel als de datum een kenmerk (attribute) toevoegen.

De titel

Klik, in het Attributes-gedeelte, op het + icoon:

We maken attributes (kenmerken) voor onze Notitie-entity

Xcode voegt meteen een kenmerk toe:

Het eerste kenmerk (attribute)

Typ in plaats van attribute de tekst titel (met een kleine letter) Kies bij Type voor String:

Het kenmerk titel heeft als type String.

Nu we het titel-kenmerk aan de entity hebben toegevoegd, doen we datzelfde met het tweede kenmerk, datum. Kies bij type voor Date:

Een tweede attribute toevoegen

Namen van kenmerken (attributes) beginnen altijd met een kleine letter. Je ziet dadelijk zie je waarom: Xcode kan automatisch een class maken op basis van de entity, met als properties alle attributen van die entity.

We zijn klaar met onze entity. Hij bevat de twee attributen die we zojuist hebben toegevoegd:

De twee attributes zijn toegevoegd

Stap 3. Laat automatisch een class maken

Eén van de fraaiste eigenschappen van Core Data is dat de ‘onderliggende database’ min of meer verborgen blijft. Je hoeft dus niet met tabellen en records te werken, maar je gebruikt classes en objecten.

Xcode kan voor onze entity in het Core Data datamodel automatisch een class definiëren, met de naam van de entiteit. Alle kenmerken (attributes) in onze class worden properties in die class. In ons geval kan Xcode dus een Notitie-class maken, met de properties .titel en .datum. Straks kunnen we met behulp van die Notitie-class heel gemakkelijk notities maken, bewaren en opvragen.

Selecteer nogmaals de Notitie-entiteit:

De Notities-entity in de File Navigator

Kies, in het Utilities-paneel aan de rechterkant, de Data Model Inspector (of druk op (⌘⌥ 3). In het tweede gedeelte, Class, zie je de optie Codegen (‘code generation’). De tekst Class Definition erachter geeft aan dat Xcode automatisch een class maakt. Dit gebeurt onzichtbaar en op de achtergrond, zonder dat je daar verder iets voor hoeft te doen.

De Core Data Model Inspector in Xcode

Automatisch gemaakte classes

De Notitie-class die door Xcode wordt gemaakt, is een subclass van NSManagedObject.

Dergelijke, door Xcode automatisch op basis van het Core Data datamodel gemaakte classes worden niet in de File Navigator van Xcode getoond. Ze worden door Xcode opgeslagen in de Derived Data-map voor je app. Ga, met de Finder, naar ~/Bibliotheek/Developer/Xcode/Derived Data en zoek de map voor je app. In die map vind je, diep verborgen, de toegevoegde class:

Derived classes voor Core Data

Deze classes zijn niet voor niets verborgen; het is niet de bedoeling dat je ze wijzigt. Xcode doet dat namelijk automatisch, telkens als je iets in het Core Data datamodel verandert.

De inhoud van de door Xcode gemaakte class-definitie ziet er als volgt uit:

Ook maakt Xcode een extensie voor deze class aan:

Het trefwoord @NSManaged is geen datatype, maar maakt het voor iOS mogelijk om alles ‘op de achtergrond’ te beheren: iOS legt een ‘brug’ tussen de Notitie-class en de bijbehorende Core Data-class, een zogenaamde NSManagedObject. Deze NSManagedObject-class is, zoals we in de volgende artikelen zullen zien, buitengewoon handig.

Tot slot

In dit artikel hebben we het Core Data datamodel van onze app gemaakt. Het heeft één entiteit, Model. Deze entiteit bevat twee kenmerken, titel en datum. Op basis van deze entiteit kunnen we nu objecten maken die we door Core Data kunnen laten opslaan. Dat doen we in het volgende artikel uit deze serie.

LET OP: je kunt deze app nu niet bouwen en uitvoeren! De reden is dat er nu twee Notitie-classes zijn: de class die we in de vorige aflevering hebben gemaakt en de class die zojuist door Xcode is gegenereerd. Als je probeert om de app toch te starten, krijg je een indrukwekkende reeks foutmeldingen:

Core Data-foutmeldingen

Deze foutmeldingen verhelpen we in het volgende artikel uit deze serie.

Klik hier om de Xcode-bestanden van dit artikel te downloaden.

In één dag Core Data leren?

In deze nieuwe LIVE Clinic over Core Data leer je in één dag hoe je zelf Core Data in je apps kunt gebruiken. Gewoon thuis, vanachter je Mac!

Meer informatie