Core data og Swift: Data Model
20
Del
7
Del
Dette Cyber mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av
Dette innlegget er en del av en serie kalt kjernedata og Swift.Core Data- og Swift. Kjerne data StackCore data og Swift: Managed Objects og Fetch Forespørsler
Innledning
I den første artikkelen i denne serien, lærte vi om grunndata stabelen, i hjertet av en Core data program. Vi utforsket klarte objektet sammenheng, den vedvarende butikken koordinator, og klarte objektmodellen.
Denne artikkelen fokuserer på datamodellen av en Core data program. Vi zoomer inn på Xcode datamodell redaktør og vi tar en titt på entiteter, attributter og relasjoner.
Forutsetninger
Det jeg dekke i denne serien på kjernedata er aktuelt for iOS 7+ og OS X 10.10+, men vil fokuset være på iOS. I denne serien vil jeg jobbe med Xcode 7.1 og Swift 2.1. Hvis du foretrekker Objective-C, så jeg anbefaler å lese min tidligere serie på grunndata rammeverket.
1. Data Model Editor
Start med å laste ned prosjektet fra forrige tutorial eller klone depotet fra GitHub. Åpne prosjektet i Xcode, og i Prosjekt Navigator
, søke etter Core_Data.xcdatamodeld
. Xcode viser automatisk datamodellen redaktøren når prosjektets datamodell er valgt.
2. Entities
Før vi utforske redaktørens brukergrensesnitt, må vi opprette et foretak til å arbeide med. På bunnen av datamodellen editor, klikker du på Legg Entity
knappen. Dette vil legge til en enhet med navn Entity. Det vil dukke opp i Enheter
til venstre på datamodellen editor. Endre enhetens navn til
Person ved å dobbeltklikke på den i Entities
delen.
"Hva er en enhet?" lurer du kanskje. Å bringe tilbake databasen analogi, er en enhet kan sammenlignes med en tabell i en database. Når du velger Person enhet, ser du at et foretak kan ha attributter, relasjoner og hentet egenskaper. Ikke bekymre deg om hentede egenskaper for nå, de er en mer avansert funksjon av rammeverket.
3. Attributter
Gi Person foretaket et attributt ved å klikke på pluss-knappen nederst i attributter
tabellen. Dobbeltklikk attributtet navn og sett den til
først. Fra Type
rullegardinmenyen, velg String
. Hvis vi sammenligner dette til en tabell i en database,
Person tabellen har nå en kolonne første av typen String
.
Selv om jeg ikke ønsker å forvirre du ved å sammenligne enheter med tabeller i en database, det gjør det lettere å forstå hva entiteter og attributter er. Faktisk, hvis du bruker en SQLite database som kompet butikk av søknaden, vil kjernedata opprette en tabell for å lagre data på personen enhet. Men dette er noe vi ikke har til og bør ikke trenger å bekymre seg for. Husk at kjernedata er ikke en database.
Det samme gjelder for relasjoner. Hvordan kjernedata holder styr på relasjoner er noe vi ikke trenger å bekymre seg for. Faktisk gjør kjernedata for at deler av innholdet er lastet når programmet trenger dem. Dette er noe vi vil se senere i denne serien.
Legg til to flere attributter til Person enhet, det siste av typen String Hotell og alder av type Integer
16
. Den type du velger for tallene er ikke viktig på dette punktet. Det forteller kjernedata hvordan det skal strukturere vedvarende butikken og optimalisere det for ytelsen.
data Valg
egenskap av en enhet kan konfigureres gjennom Data Model Inspector Anmeldelser . Velg den første egenskap av Person enhet og åpne inspektøren til høyre. Datamodellen Inspector lar deg konfigurere den valgte attributtet. På dette punktet er vi bare interessert i noen innstillinger, Valgfritt
, attributtype
, og Standard Verdi
.
Valgfritt
Merking et attributt som ekstrautstyr betyr at attributtet kan være tomt eller tomt for en rekord. I vårt eksempel, men vi ønsker å sikre at hver person posten har et fornavn. Med den første attributtet valgt, fjerner du merket Valgfri
å merke det som er nødvendig. Nye egenskaper er valgfritt som standard.
Merking et attributt som kreves har konsekvenser skjønt. Hvis vi sparer en person rekord uten gyldig fornavn, vil kjernedata kaste en feil. Dette betyr at vi må sørge for at posten første attributt er satt før du lagrer det.
attributtype
Attributtypen er viktig av flere grunner. Det forteller kjernedata i hvilket format det skal spare attributtet, og det vil også returnere attributt data til oss i det angitte formatet. Hvert attributt type har et annet sett med konfigurasjonsmuligheter. Endre attributtet type første attributt til Dato
å se konfigurasjonsmuligheter for en egenskap av typen Dato
.
Standard Verdi
Flere attributt typer, for eksempel String Hotell og Dato
, har en Standard Verdi
felt du kan stille. Dette er praktisk, for eksempel hvis en attributt er nødvendig og du ønsker å sikre attributtet for et rekord har en gyldig verdi når det settes inn i databasen.
Legg merke til at standardverdien brukes bare når en ny posten er opprettet. Hvis en eksisterende Person rekord, for eksempel, blir oppdatert ved å sette den første attributt til null, så Kjerne Data vil ikke fylle den første attributtet med standardverdien. I stedet Kjerne data vil kaste en feil, fordi vi markerte den første attributt som kreves.
4. Relasjoner
Kjernedata virkelig skinner når du begynner å arbeide med relasjoner mellom enheter. La oss se hvordan dette fungerer ved å legge til en ny enhet som heter Adresse. The Address foretaket har fire attributtene typen String
, street, antall, byen og landet.
Forholdet mellom enhetene har en rekke definerende egenskaper, navn, reisemål, kardinaliteten av forholdet, det omvendte forholdet, og forholdet er sletteregelen.
La oss utforske relasjoner i mer detalj ved å skape en relasjon mellom personen og adresse enheter.
Navn, Destination, og opsjonalitet
Opprett et forhold ved å velge Person enhet og klikke på pluss-knappen nederst i Relasjoner
tabellen. Navn forholdet
adresse og angi Mål
i adresse enhet. Dette indikerer at hver person posten kan være forbundet med en adresse posten.
Som med attributter, relasjoner er valgfritt som standard. Dette betyr at ingen valideringsfeil vil bli kastet dersom en person rekord har ingen sammenheng med en adresse posten. La oss endre dette ved å fjerne avmerkingen for Valgfritt
i Data Model Inspektør
til høyre.
Inverse Sivil
På øyeblikket, kan personen ha et forhold til en adresse posten. Men hvis personen har en adresse rekord forbundet med det, adresseoppføringen ikke vet om personen posten, fordi forholdet er enveis i øyeblikket-fra person til Adresse. De fleste relasjoner i kjernedata, men er toveis, begge enhetene vite om forholdet.
La oss lage den inverse forholdet fra Adresse enhet til Person enhet ved å velge adresse foretaket og skape et forhold navngitt person med Person foretaket som sin destinasjon.
Selv om vi skapte den inverse forholdet mellom Adresse og Person, Xcode gir oss noen advarsler forteller oss Person.address
bør ha en invers Hotell og Address.person bør ha en invers
. Har vi gjort noe galt?
Kjerne data er ikke smart nok til å vite hvilke forhold er den inverse forholdet som forholdet. Dette er lett å fikse selv. Velg Person enhet og sette Inverse
av adressen forhold til person, personen forholdet. Hvis du nå velge adresse enhet, vil du se at den inverse av adressen forholdet har allerede blitt satt til personen forholdet.
Data Model Graph
Når datamodellen gevinster i kompleksitet , relasjoner kan bli forvirrende og uklar. Xcode har ryggen dekket skjønt. Datamodellen redaktøren har to stiler, tabellen Hotell og grafen
. I nederst til høyre på den, vil du se en vippe, redaktør stil, som lar deg veksle mellom de to stilene. Klikk på knappen til høyre for å bytte til grafstilen.
Grafen stil viser objektet grafen vi har laget så langt. Den viser oss de enhetene vi har laget, deres attributter, og deres relasjoner. En av de mest nyttige funksjonene, derimot, er den visuelle representasjon av relasjonene mellom enhetene i datamodellen. En linje med en pil i hver ende kobler Person og adresse, symboliserer deres toveis forhold.
til-mange relasjoner
De relasjonene vi har laget så langt er til- ett relasjoner
, en person kan ha en adresse og vice versa. Men det er mulig at flere mennesker bor på samme adresse. Hvordan ville vi inkludere denne ekstra informasjon i datamodellen?
Et forhold er kardinaliteten spesifiserer om det er en til-en eller til-mange-relasjon. La oss endre personens forhold i adresse foretaket å gjøre det en til-mange-relasjon. Velg personen forholdet adresse enhet, endrer navn til personer til å reflektere til-mange-relasjon, og satt forholdet Skriv
til Slik Mange
i inspektøren til høyre.
Navnet på forholdet er ikke viktig, men det viser at det er en til-mange-relasjon. Legg merke til at datamodellen graf oppdateringer automatisk. Forholdet endepunkt til Person foretaket har to pilene for å symbolisere til-mange-innholdet i forholdet.
mange-til-mange relasjoner
Vent et øyeblikk. Er det ikke mulig at en person er tilknyttet mer enn én adresse? En person kan ha en arbeidsadresse og hjemmeadresse. Høyre? Kjernen data løser dette ved å opprette en mange-til-mange
forholdet. Velg adressen forholdet mellom Person enhet, endrer navn til adresser, og sette forholdet Skriv
til Slik Mange
. Datamodellen Grafen viser den oppdaterte forholdet som en linje med to piler på begge ender.
Reflexive relasjoner
Måten kjernedata implementerer relasjoner er svært fleksibel. Bestemmelses enhet av et forhold kan også være den samme som kilden enhet. Dette er kjent som en refleksiv
forholdet. Det er også mulig å ha flere forhold av samme type med forskjellige navn. En person, for eksempel, kan ha en mor og en far. Begge forhold er refleksiv med den eneste forskjellen er navnet på forholdet.
Slett regler
Hva skjer når rekorden på den ene enden av forholdet slettes? Hvis du skulle tenke på kjernedata som en database, så svaret ville være åpenbar. Kjernen data, men er ikke en database.
Anta at du har en konto enhet med en til-mange-relasjon til en brukerenhet. Med andre ord, kan en konto ha mange brukere, og hver bruker tilhører en konto. Hva skjer når du sletter en bruker? Hva skjer når du sletter en konto? I kjernedata, har hver relasjon en sletteregel som gjør det klart hva som skjer i disse situasjonene.
Slett regler gjør at du ikke trenger å bekymre deg eksplisitt oppdatere vedvarende butikken når posten er slettet. Kjernen data tar seg av dette for å sikre objektet grafen forblir i en konsistent tilstand.
Velg adresser forholdet mellom Person enhet og åpne inspektøren til høyre. Slett regel
menyen har fire alternativer, Ingen handling
, opphever
, Cascade
, og Nekt
.
Ingen handling
Hvis du velger Ingen handling
, betyr kjernedata ikke oppdatere eller varsle kilden registrering av forholdet. Dette betyr at kilden registrering av forholdet fortsatt mener det har en sammenheng med den posten som ble slettet. Dette er sjelden det du ønsker.
opphever
Dette alternativet angir målet for forholdet til null når destinasjonen posten slettes. Dette er standard sletteregelen for et forhold. Du kan bruke denne slette regelen hvis, for eksempel, er valgfritt et forhold.
Cascade
Dersom forholdet fra person til Adresse er satt til Cascade
, slette en person posten vil også slette eventuelle adresse poster som er knyttet til den personen posten. Dette er nyttig, for eksempel hvis et forhold er nødvendig og posten ikke kan eller bør ikke eksistere uten forholdet. En bruker, for eksempel, bør ikke eksistere hvis det ikke er tilknyttet en konto.
Nekt
På en måte Deny
er den inverse av Cascade
. For eksempel, hvis vi har en konto enhet som har en til-mange-relasjon med en brukersubjekt med sletteregelen satt til Deny
, kan en konto rekord bare slettes hvis den har noen poster knyttet til den . Dette sikrer at noen poster eksistere uten en konto rekord.
Konklusjon
I denne opplæringen, vi har tatt en nærmere titt på datamodellen som brukes av en kjernedata søknad. Du skal nå være kjent med entiteter, attributter og relasjoner, og du bør være i stand til å lage dem ved hjelp av Xcode datamodell redaktør.
Kjerne data er veldig flinke til å håndtere relasjoner og Xcode datamodell editor gjør det enkelt å opprette og administrere relasjoner mellom enheter. Relasjoner mellom enheter er kraftig og enkel å konfigurere. Slett regler sikre at objektet grafen kjernedata klarer fortsatt frisk og i en konsistent tilstand.
I neste artikkel, får vi våre hender skitne og begynne å jobbe med kjernedata. Du vil lære å opprette, lese, oppdatere og slette poster, og bli kjent med NSManagedObject og NSFetchRequest.