Getting Started with Core Data Tutorial

tämä on lyhennetty luku kirjastamme Core Data by Tutorial, joka on täysin päivitetty Swift 4.2: lle ja iOS 12: lle. Tämä opetusohjelma esitetään osana iOS 12-Lanseerausjuhlaamme-nauti!

Tervetuloa Core dataan!

tässä opetusohjelmassa kirjoitat aivan ensimmäisen Ydintietosovelluksesi. Näet, kuinka helppoa on päästä alkuun kaikilla resursseilla, joita Xcode tarjoaa, aloituskoodimalleista Datamallieditoriin.

lyöt juoksun heti alussa. Loppuun mennessä opetusohjelma tiedät miten:

  • Xcoden mallieditorilla
  • lisää uusia tietueita Ydintietoihin
  • Hae tietuesarja Ydintiedoista
  • Näytä noudetut tietueet taulukkonäkymällä.

saat myös käsityksen siitä, mitä Ydintieto tekee kulissien takana, ja miten voit olla vuorovaikutuksessa erilaisten liikkuvien kappaleiden kanssa.

aloittaminen

avaa Xcode ja luo Uusi iOS-projekti, joka perustuu Single View-Sovellusmalliin. Nimeä sovellus HitList ja varmista, että Käytä Ydintietoja on tarkistettu.

Use Core-tietolaatikon tarkistaminen aiheuttaa sen, että Xcode luo boilerplate-koodin, joka tunnetaan nimellä NSPersistentContainer Appdelegatessa.nopea.

NSPersistentContainer koostuu joukosta olioita, jotka helpottavat tietojen tallentamista ja hakemista Ydinaineistosta. Tämän säiliön sisällä on objekti, jolla hallitaan Ydintietotilaa kokonaisuutena, objekti, joka edustaa tietomallia ja niin edelleen.

standardipino toimii hyvin useimmissa sovelluksissa, mutta riippuen sovelluksestasi ja sen tietovaatimuksista, voit muokata pinoa tehokkaammaksi.

Huom.: Kaikissa Xcode-malleissa iOS ▸ – sovelluksessa ei ole mahdollisuutta aloittaa Ydintiedoista. Xcode 10: ssä vain Master-Detail-sovelluksessa ja Single View-Sovellusmalleissa on Use Core Data-valintaruutu.

tämän näytesovelluksen idea on yksinkertainen: tulee pöytänäkymä, jossa on nimilista ikiomalle ”hittilistalle”. Voit lisätä nimiä tähän luetteloon, ja lopulta, käyttää Ydintietoja varmista, että tiedot tallennetaan istuntojen välillä. Emme suvaitse väkivaltaa tällä sivustolla, joten voit ajatella tätä sovellusta suosikkilistana pitääksesi silmällä myös ystäviäsi, tietenkin!

klikkaa Main.storyboard to open it in Interface Builder. Valitse näkymäohjain kankaalle ja upota se navigointiohjaimen sisään. Valitse Xcode Editor-valikosta upota … ▸ navigointiohjain.

Napsauta navigaatio-ohjaimen navigointipalkkia valitaksesi sen ja napsauta Prefers Large Titles in the Attributes Inspector. Tämä antaa näyte sovellus otsikko tyyli, joka vastaa Applen varastossa Sovellukset.

vedä seuraavaksi taulunäkymä objektikirjastosta näkymäohjaimeen ja muuta sen kokoa niin, että se kattaa koko näkymän.

jos se ei ole vielä auki, avaa käyttöliittymän rakentajan asiakirjakehys kankaan vasemmassa alakulmassa olevasta kuvakkeesta.

Ctrl-vedä dokumentin ääriviivojen Taulukkonäkymästä ylänäkymään ja valitse johtava tila turvalliseen aluerajoitukseen:

Tee tämä vielä kolme kertaa, valitsemalla rajoitukset perään tilaa turvallinen alue, Top Space turvallinen alue ja lopuksi, pohja Tilaa turvallinen alue. Kun nämä neljä rajoitusta lisätään, Taulukkonäkymä täyttää päänäkymänsä.

vedä seuraavaksi Viivapainike ja aseta se näkymäohjaimen navigointipalkkiin. Lopuksi, valitse bar painike kohde ja muuttaa sen järjestelmän kohde lisätä.

kankaasi tulisi näyttää samanlaiselta kuin seuraava kuvakaappaus:

joka kerta kun painat Lisää-painiketta, näkyviin tulee tekstikentän sisältävä hälytysohjain. Sieltä, voit kirjoittaa jonkun nimi tekstikenttään. Naputus Save tallentaa nimen, hylkää hälytysohjaimen ja päivittää taulunäkymän näyttäen kaikki syöttämäsi nimet.

mutta ensin pitää tehdä näkymäohjaimesta taulunäkymän tietolähde. Piirtokankaassa Ctrl-vedä taulunäkymästä navigointipalkin yläpuolella olevaan keltaiseen näkymäohjaimen kuvakkeeseen, kuten alla on esitetty, ja klikkaa dataSource:

jos mietit, sinun ei tarvitse perustaa taulukon näkymä valtuutettu koska napauttamalla soluja ei laukaista mitään toimintaa. Tästä ei tule yksinkertaisempaa!

avaa apulaiseditori painamalla Komento-Optio-Enter tai valitsemalla muokkaimen työkalusarjan keskimmäinen painike Xcode-palkissa.

Ctrl-vedä taulunäkymästä Viewcontrollerille.swift sisällä luokan määritelmä luoda IBOutlet.

seuraavaksi nimeä Uusi IBOutlet ominaisuus tableView, jolloin saadaan seuraava rivi:

@IBOutlet weak var tableView: UITableView!

seuraavaksi Ctrl-raahaa lisää-painikkeesta Viewcontrolleriin.swift hieman alle viewDidLoad() – määritelmäsi. Tällä kertaa luo toiminto ulostulon sijaan, nimeämällä menetelmä addName, tyypillä UIBarButtonItem:

@IBAction func addName(_ sender: UIBarButtonItem) { }

voit nyt viitata taulukkonäkymään ja viivapainikkeen kohteen toimintaan koodilla.

seuraavaksi asetat mallin taulunäkymään. Lisää seuraava ominaisuus Viewcontrolleriin.swift alla tableView IBOutlet:

var names: = 

names on muunneltavissa oleva matriisi, jolla on taulukkonäkymän näyttämät merkkijonoarvot. Korvataan seuraavaksi viewDidLoad() toteutus seuraavasti:

override func viewDidLoad() { super.viewDidLoad() title = "The List" tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")}

tämä asettaa otsikon navigointipalkkiin ja rekisteröi UITableViewCell – luokan taulukkonäkymällä.

Huomautus: register(_:forCellReuseIdentifier:) takaa, että taulunäkymäsi palauttaa oikean tyypin solun, kun solun reuseIdentifier-tunniste toimitetaan dequeue – menetelmällä.

Next, still in ViewController.swift, lisää seuraava UITableViewDataSource laajennus alle luokkamääritelmäsi ViewController:

// MARK: - UITableViewDataSourceextension ViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return names.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) cell.textLabel?.text = names return cell }}

jos olet joskus työskennellyt UITableView: n kanssa, tämän koodin pitäisi näyttää hyvin tutulta. Ensin palautat taulukon rivien määrän names rivin kappalemääränä.

Seuraava, tableView(_:cellForRowAt:) dequeues-taulukko katsoo soluja ja kansoittaa ne vastaavalla merkkijonolla names – ryhmästä.

seuraavaksi tarvitset tavan lisätä uusia nimiä, jotta taulunäkymä voi näyttää ne. Toteuta addName IBAction – menetelmä, jonka Ctrl-raahasit koodiisi aiemmin:

// Implement the addName IBAction@IBAction func addName(_ sender: UIBarButtonItem) { let alert = UIAlertController(title: "New Name", message: "Add a new name", preferredStyle: .alert) let saveAction = UIAlertAction(title: "Save", style: .default) { action in guard let textField = alert.textFields?.first, let nameToSave = textField.text else { return } self.names.append(nameToSave) self.tableView.reloadData() } let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) alert.addTextField() alert.addAction(saveAction) alert.addAction(cancelAction) present(alert, animated: true)}

joka kerta kun painat Lisää-painiketta, tämä menetelmä esittää UIAlertController tekstikentän ja kaksi painiketta: Tallenna ja Peruuta.

Tallenna lisää tekstikentät nykyisen tekstin names taulukkoon ja lataa sitten taulukkonäkymän. Koska names array on taulukkonäkymän taustalla oleva malli, taulukkonäkymässä näkyy se, mitä tekstikenttään kirjoitetaan.

Rakenna ja suorita sovellus vihdoin ensimmäistä kertaa. Napauta seuraavaksi Lisää-painiketta. Hälytysohjain näyttää tältä:

lisää listaan neljä tai viisi nimeä. Sinun pitäisi nähdä jotain vastaavaa alla:

pöytänäkymäsi näyttää tiedot ja järjestelmäsi tallentaa nimet, mutta iso asia puuttuu tässä on pysyvyys. Array on muistissa, mutta jos pakotat lopettamaan sovelluksen tai käynnistä laite uudelleen, hittilistasi pyyhitään pois. Core Data tarjoaa pysyvyys, eli se voi tallentaa tietoja kestävämpi tilassa, joten se voi elää pidempään sovelluksen uudelleen käynnistää tai laitteen uudelleenkäynnistys.

et ole vielä lisännyt mitään keskeisiä Tietoalkioita, joten minkään ei pitäisi säilyä sen jälkeen, kun navigoit pois sovelluksesta. Kokeillaan tätä. Paina Home-painiketta, jos käytät fyysistä laitetta, tai vastaavaa (Shift + ⌘ + H), jos käytät simulaattoria. Tämä vie sinut takaisin tuttuun sovellusruudukkoon kotinäytöllä:

napauta aloitusnäytöstä HitList-kuvaketta tuodaksesi sovelluksen takaisin etualalle. Nimet ovat yhä ruudussa. Mitä kävi?

kun napautat Koti-painiketta, etualalla oleva sovellus siirtyy taustalle. Kun tämä tapahtuu, käyttöjärjestelmä flash-jäädyttää kaiken tällä hetkellä muistissa, mukaan lukien merkkijonot nimet array. Samoin, kun on aika herätä ja palata etualalle, käyttöjärjestelmä palauttaa sen, mitä ennen oli muistissa kuin et olisi koskaan poistunut.

Apple esitteli nämä moniajon edistysaskeleet iOS 4: ssä. Ne luovat saumattoman kokemuksen iOS-käyttäjille, mutta lisäävät ryppyjä pysyvyyden määritelmään iOS-kehittäjille. Ovatko nimet todella itsepintaisia?

ei, ei oikeastaan. Jos olisit täysin tappanut sovelluksen fast app switcher tai sammutti puhelimen, ne nimet olisivat poissa. Voit myös vahvistaa tämän. Kun sovellus on etualalla, syötä nopea sovellusvaihtaja. Voit tehdä tämän joko kaksinkertainen napauttamalla Koti-painiketta, jos laitteessa on yksi tai hitaasti vetämällä ylöspäin näytön alareunasta, jos olet iPhone X.

tästä, flick HitList app snapshot ylöspäin lopettaa sovelluksen. Jos työskentelet iPhone X, sinun täytyy pitkään-paina sovelluksen tilannekuvan kunnes punainen Poista-painiketta näkyy oikeassa yläkulmassa.

kun olet poistanut sovelluksen app switcheristä, hitlististä ei pitäisi olla jälkeäkään elävässä muistissa (ei sanaleikkejä). Tarkista nimet ovat menneet palaamalla aloitusnäyttöön ja napauttamalla HitList-kuvaketta käynnistää uuden käynnistyksen.

ero salamajäädytyksen ja pysyvyyden välillä voi olla ilmeinen, jos olet työskennellyt iOS: n kanssa jonkin aikaa ja olet perehtynyt moniajon toimintatapaan. Käyttäjän mielessä eroa ei kuitenkaan ole. Käyttäjä ei välitä miksi nimet ovat edelleen olemassa, onko sovellus meni taustalla ja tuli takaisin, tai koska sovellus tallentaa ja ladata ne uudelleen. Vain sillä on väliä, että nimet ovat vielä olemassa, kun sovellus tulee takaisin!

joten todellinen pysyvyyden testi on, onko tietosi vielä olemassa tuoreen sovelluksen julkaisun jälkeen.

Oman datan mallintaminen

nyt kun osaat tarkistaa pysyvyyden, voit sukeltaa Ydintietoihin. Tavoitteesi HitList-sovellukselle on yksinkertainen: säilytä antamasi nimet niin, että ne ovat nähtävillä tuoreen sovelluksen käynnistämisen jälkeen.

tähän asti olet käyttänyt plain old Swift-merkkijonoja tallentaaksesi nimet muistiin. Tässä osiossa, voit korvata nämä merkkijonot ydin Data-objekteja.

ensimmäinen vaihe on luoda hallittu oliomalli, joka kuvaa tapaa, jolla Ydinaineisto edustaa levyllä olevaa dataa.

Perusdata käyttää oletuksena SQLite-tietokantaa pysyvänä säilönä, joten tietomallia voi pitää tietokantarakenteena.

huomaa: törmäät sanaan hallittu aika paljon, kun käsittelet Ydinaineistoa. Jos luokan nimessä näkyy ”hallittu”, kuten NSManagedObjectContext, kyseessä on todennäköisesti Ydintietoluokka. ”Hallittu” tarkoittaa Ydintiedon Ydintietoobjektien elinkaaren hallintaa.

älä kuitenkaan oleta, että kaikissa Ydintietoluokissa on sana ”hallittu”. Useimmat eivät. Jos haluat kattavan luettelon Ydintietoluokista, tutustu Ohjeselaimessa olevaan Ydintietokehyksen viitekehykseen.

koska olet päättänyt käyttää Ydintietoja, Xcode loi automaattisesti Sinulle Tietomallitiedoston ja nimesi sen Hitlistiksi.xcdatamodeld.

Avaa Hittilista.xcdatamodeld. Kuten näette, Xcode on tehokas Tietomallieditori:

Tietomallieditorissa on paljon ominaisuuksia, joita voit tutkia myöhemmin. Keskitytään nyt yhden Ydintietoyksikön luomiseen.

napsauta lisää entiteetti alhaalla vasemmalla luodaksesi uuden entiteetin. Kaksoisnapsauta uutta kokonaisuutta ja muuta sen nimi henkilöksi, kuten näin:

saatat ihmetellä, miksi mallieditori käyttää termiä Entity. Etkö vain määritellyt uutta luokkaa? Kuten näette pian, Ydintiedolla on oma sanastonsa. Tässä on nopea alas joitakin termejä voit yleisesti kohdata:

  • yhteisö on ydintiedoissa luokan määritelmä. Klassinen esimerkki on Employee tai Company. Relaatiotietokannassa olio vastaa taulukkoa.
  • attribuutti on tiettyyn kokonaisuuteen liitetty tieto. Esimerkiksi Employee yhteisöllä voi olla attribuutteja työntekijän name, position ja salary. Tietokannassa attribuutti vastaa tiettyä taulukon kenttää.
  • suhde on usean yksikön välinen linkki. Ydinaineistossa kahden olion välisiä suhteita kutsutaan to-one-suhteiksi, kun taas yhden ja monen olion välisiä suhteita kutsutaan to-many-suhteiksi. Esimerkiksi Manager voi olla to-many suhde joukko työntekijöitä, kun taas yksilö Employee on yleensä to-one suhde hänen johtaja.
huomaa: olet varmaan huomannut kokonaisuuksien kuulostavan paljon luokilta. Samoin, attribuutit ja suhteet kuulostavat paljon ominaisuuksia. Mitä väliä sillä on? Ydintietoyksikkö voidaan ajatella luokan määritelmänä ja hallittu olio kyseisen luokan ilmentymänä.

nyt tiedät mikä attribuutti on, voit lisätä attribuutin Person aiemmin luotuun objektiin. Yhä Hitlistissä.xcdatamodeld, valitse Person vasemmasta reunasta ja napsauta attribuuttien kohdalta plus-merkkiä ( + ).

Aseta uuden ominaisuuden nimeksi er, name ja muuta sen tyyppi merkkijonoksi:

Ydinaineistossa attribuutti voi olla yksi useista tietotyypeistä.

tallentaminen Ydintietoihin

Open ViewController.swift, lisää seuraava Ydintietomoduulin tuonti alle UIKit tuonti:

import CoreData

tämä tuonti on kaikki mitä tarvitset alkaa käyttää Core Data API koodin.

korvaa seuraavaksi names ominaisuusmääritelmä seuraavalla:

var people: = 

tallennat Person entiteettejä merkkijonojen nimien sijaan, joten nimeät taulukkonäkymän tietomallina toimivan taulukon people. Siinä on nykyään yksinkertaisten merkkijonojen sijaan esiintymiä NSManagedObject.

NSManagedObject edustaa yhtä ydintietoihin tallennettua objektia; sinun on käytettävä sitä luodaksesi, muokataksesi, tallentaaksesi ja poistaaksesi Ydintietosi pysyvästä varastosta. Kuten pian näette, NSManagedObject on muodonmuuttaja. Se voi olla minkä tahansa yksikön muodossa Tietomallissasi, omaksuen määrittelemäsi attribuutit ja suhteet.

koska taulukkonäkymän malli on vaihtumassa, täytyy myös korvata molemmat aiemmin toteutetut tietolähdetavat. Korvaa UITableViewDataSource – laajennus seuraavalla:

// MARK: - UITableViewDataSourceextension ViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return people.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let person = people let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) cell.textLabel?.text = person.value(forKeyPath: "name") as? String return cell }}

merkittävin muutos näihin menetelmiin tapahtuu tableView(_:cellForRowAt:). Sen sijaan, että solut täsmäävät mallijoukon vastaavan merkkijonon kanssa, ne täsmäävät nyt vastaavan merkkijonon NSManagedObjectkanssa.

huomaa, miten nappaat name – attribuutin NSManagedObject: stä. Se tapahtuu täällä.:

cell.textLabel?.text = person.value(forKeyPath: "name") as? String

miksi sinun täytyy tehdä tämä? Kävi ilmi, että NSManagedObject ei tiedä tietomallissasi määrittelemästäsi name – attribuutista, joten siihen ei ole mahdollista päästä suoraan ominaisuuden avulla. Ainoa tapa Ydinaineisto tarjoaa lukea arvo on avain-arvo koodaus, yleisesti kutsutaan KVC.

Huomautus: KVC on perusta, jonka avulla objektin ominaisuuksia voidaan käyttää epäsuorasti merkkijonojen avulla. Tällöin KVC saa NSMangedObject käyttäytymään suorituksen aikana jonkin verran sanakirjan tavoin.

Avainarvokoodaus on saatavilla kaikille luokille, jotka perivät NSObject, mukaan lukien NSManagedObject. Ominaisuuksia ei voi käyttää KVC: n avulla Swift-objektissa, joka ei laske arvoa NSObject.

seuraavaksi etsi addName(_:) ja korvaa save UIAlertAction seuraavalla:

let saveAction = UIAlertAction(title: "Save", style: .default) { action in guard let textField = alert.textFields?.first, let nameToSave = textField.text else { return } self.save(name: nameToSave) self.tableView.reloadData()}

tämä vie tekstin tekstikenttään ja siirtää sen uudelle menetelmälle, jonka nimi on save(name:). Xcode valittaa, koska save(name:) ei ole vielä olemassa. Lisää se alle addName(_:):

func save(name: String) { guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return } // 1 let managedContext = appDelegate.persistentContainer.viewContext // 2 let entity = NSEntityDescription.entity(forEntityName: "Person", in: managedContext)! let person = NSManagedObject(entity: entity, insertInto: managedContext) // 3 person.setValue(name, forKeyPath: "name") // 4 do { try managedContext.save() people.append(person) } catch let error as NSError { print("Could not save. \(error), \(error.userInfo)") }}

tässä kohtaa ydintiedot alkavat vaikuttaa! Näin koodi tekee:

  1. ennen kuin voit tallentaa tai hakea mitään Ydintietokannastasi, sinun on ensin saatava käsiisi NSManagedObjectContext. Voit pitää hallittua objektia kontekstina muistissa olevana ”scratchpadina” hallittujen objektien kanssa työskentelyä varten.

    ajattele uuden hallitun objektin tallentamista Ydintietoihin kaksivaiheisena prosessina: ensin lisätään uusi hallittu objekti hallittuun objektiyhteyteen; kun olet tyytyväinen, ”toimitat” muutokset hallittuun objektiyhteyteen tallentaaksesi sen levylle.

    Xcode on jo luonut hallitun objektiyhteyden osana uuden projektin mallia. Muista, tämä tapahtuu vain, jos valitset Use Core Data-valintaruudun alussa. Tämä oletusarvoinen hallittu objekti-konteksti elää ominaisuutena NSPersistentContainer sovellusvaltuutetussa. Voit käyttää sitä, saat ensin viittaus app delegaatti.

  2. luot uuden hallitun objektin ja lisäät sen hallitun objektin kontekstiin. Voit tehdä tämän yhdessä vaiheessa NSManagedObject: n staattisella menetelmällä: entity(forEntityName:in:).

    saatat ihmetellä, mistä NSEntityDescription on kyse. Aiemmin NSManagedObject kutsuttiin muodonmuuttajaluokaksi, koska se voi edustaa mitä tahansa oliota. Entiteettikuvaus on kappale, joka yhdistää tietomallisi entiteettimääritelmän instanssiin, jonka arvo on NSManagedObject suorituksen aikana.

  1. kun NSManagedObject on kädessä, määritetään name – attribuutti avainarvokoodauksella. KVC-näppäin (name tässä tapauksessa) on tavattava täsmälleen sellaisena kuin se näkyy Tietomallissasi, muuten sovelluksesi kaatuu suoritettaessa.
  2. toimitat muutokset kohteeseen person ja tallennat levylle kutsumalla save hallittuun objektiyhteyteen. Huomautus save voi heittää virheen, minkä vuoksi sitä kutsutaan try – hakusanalla do-catch – lohkon sisällä. Lisää lopuksi Uusi hallittu objekti people – ryhmään niin, että se näkyy, kun taulunäkymä latautuu uudelleen.

se on hieman monimutkaisempaa kuin jousiston käyttäminen, mutta ei hullumpaa. Osa tässä olevasta koodista, kuten hallitun objektin kontekstin ja kokonaisuuden saaminen, voitiin tehdä vain kerran omalla init() tai viewDidLoad() sitten käyttää uudelleen myöhemmin. Yksinkertaisuuden vuoksi teet kaiken samalla menetelmällä.

Rakenna ja suorita sovellus ja lisää muutama nimi taulukkonäkymään:

jos Nimet todella tallennetaan Ydintietoihin, HitList-sovelluksen pitäisi läpäistä pysyvyystesti. Kun sovellus on etualalla, siirry fast app switcher ja sitten lopettaa sen.

ponnahduslaudalta, napauta HitList-sovellusta käynnistääksesi uuden laukaisun. Mitä tapahtui? Taulunäkymä on tyhjä:

Tallennit Ydintietoihin, mutta tuoreen app-julkaisun jälkeen people array on tyhjä! Tämä johtuu siitä, että tiedot ovat levyllä odottamassa sinua, mutta et näytä sitä vielä.

haetaan perustiedoista

saadaksesi tietoja pysyvästä varastostasi hallittuun objektiyhteyteen, sinun on haettava se. Avaa ViewController.swift ja lisää alla seuraavatviewDidLoad():

override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) //1 guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return } let managedContext = appDelegate.persistentContainer.viewContext //2 let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Person") //3 do { people = try managedContext.fetch(fetchRequest) } catch let error as NSError { print("Could not fetch. \(error), \(error.userInfo)") }}

askel askeleelta, tämä on mitä koodi tekee:

  1. ennen kuin Ydintiedoilla voi tehdä mitään, tarvitaan hallittu oliokonteksti. Noutaminen ei ole sen kummempaa! Kuten ennenkin, vedät sovelluksen delegaatin ylös ja nappaat viittauksen sen pysyvään astiaan saadaksesi kätesi sen NSManagedObjectContext.
  2. kuten nimestä voi päätellä, NSFetchRequest on luokka, joka vastaa hakemisesta Ydinaineistosta. Noutopyynnöt ovat sekä tehokkaita että joustavia. Voit hakea noutopyyntöjen avulla joukon annetut kriteerit täyttäviä esineitä (ts. anna minulle kaikki Wisconsinissa asuvat työntekijät, jotka ovat olleet yrityksessä vähintään kolme vuotta), yksilölliset arvot (eli anna minulle pisin nimi tietokannassa) ja enemmän.

    Noutopyynnöissä on useita karsintoja, joita käytetään palautettujen tulosten tarkentamiseen. Toistaiseksi kannattaa tietää, että NSEntityDescription on yksi näistä vaadituista karsinnoista.

    noutopyynnön entity ominaisuuden asettaminen tai vaihtoehtoisesti sen alustaminen arvolla init(entityName:) hakee kaikki tietyn olion oliot. Näin haet täältä kaikki Person oliot. Myös huomautus NSFetchRequest on yleinen tyyppi. Tämä generiikan käyttö määrittää noutopyynnön odotetun palautustyypin, tässä tapauksessa NSManagedObject.

  3. luovutat noutopyynnön hallittuun objektiyhteyteen tehdäksesi raskaan noston. fetch(_:) palauttaa joukon hallittuja objekteja, jotka täyttävät noutopyynnön kriteerit.

Huom: kuten save(), myös fetch(_:) voi heittää virheen, joten sitä on käytettävä do lohkon sisällä. Jos noudon aikana tapahtui virhe, voit tarkastaa catch – lohkon sisällä olevan virheen ja vastata siihen asianmukaisesti.

Rakenna ja suorita sovellus. Heti, sinun pitäisi nähdä lista nimiä olet lisännyt aiemmin:

hienoa! He ovat palanneet kuolleista (sanaleikki tarkoitettu). Lisää muutama nimi listaan ja käynnistä sovellus uudelleen varmistaaksesi, että tallentaminen ja noutaminen toimivat. Paitsi sovelluksen poistaminen, simulaattorin nollaaminen tai puhelimen heittäminen korkealta rakennukselta, nimet näkyvät taulukkonäkymässä riippumatta siitä, mitä tapahtuu.

huomaa: tässä näytesovelluksessa oli muutama karkea särmä: sinun piti saada hallittu objekti-konteksti app delegaatilta joka kerta, ja käytit KVC: tä päästäksesi käsiksi olion attribuutteihin luonnollisemman oliotyylisen person.namesijaan.

Key Points

  • Core Data tarjoaa levylle pysyvyyttä, mikä tarkoittaa, että tietosi ovat käytettävissä myös sovelluksen lopettamisen tai laitteen sulkemisen jälkeen. Tämä eroaa muistin pysyvyydestä, joka tallentaa tietosi vain niin kauan kuin sovelluksesi on muistissa, joko etualalla tai taustalla.
  • Xcode sisältää tehokkaan Tietomallieditorin, jonka avulla voit luoda hallitun objektimallin.
  • hallittu oliomalli koostuu entiteeteistä, attribuuteista ja suhteista
  • Olio on ydintiedoissa luokkamääritelmä.
  • attribuutti on kokonaisuuteen liitetty tieto.
  • suhde on usean yksikön välinen linkki.
  • An NSManagedObject On run-time representation of a Core Data entity. Voit lukea ja kirjoittaa sen attribuutteja käyttämällä Avainarvokoodausta.
  • tarvitset NSManagedObjectContextsave() tai fetch(_:) tiedot Ydintietoihin ja niistä pois.

minne tästä eteenpäin?

voit ladata valmiin projektin tälle opetusohjelmalle käyttämällä tämän opetusohjelman ylä-tai alalaidassa olevia ”Download materials” – painikkeita.

tässä opetusohjelmassa olet jo kokenut useita Perusdatan käsitteitä: tietomalleja, entiteettejä, attribuutteja, hallittuja objekteja, hallittuja objektiyhteyksiä ja noutopyyntöjä.

jos olet nauttinut siitä, mitä olet oppinut tässä opetusohjelmassa, miksi et tutustu myymälästämme saatavaan täydelliseen Ydinaineistoon Tutorials-kirjan avulla?

tässä esimakua siitä, mitä kirjassa on:

1. Luku 1, Ensimmäinen Ydintietosovelluksesi: napsautat tiedostoa ▸ New Project ja kirjoitat Ydintietosovelluksen tyhjästä! Tämä luku kattaa perusteet perustaa tietomallin ja sitten lisäämällä ja hakemalla tietueita.

2. Luku 2, NSManagedObject-alaluokat: NSManagedObject on Ydintietoobjektin kuvaajien perustallennusluokka. Tämä luku opettaa sinulle, miten voit muokata omia hallittuja objektiluokkia tallentamaan ja vahvistamaan tietoja.

3. Luku 3, Ydintietopino: konepellin alla ydintiedot koostuvat monista yhdessä toimivista osista. Tässä luvussa, opit miten nämä osat sopivat yhteen, ja siirtyä pois starter Xcode malli rakentaa oman muokattavissa järjestelmä.

4. Luku 4, keskitason hakeminen: sovelluksesi hakevat tietoja koko ajan, ja Core Data tarjoaa monia vaihtoehtoja tietojen saamiseksi sinulle tehokkaasti. Tässä luvussa käsitellään edistyneempiä noutopyyntöjä, predikaatteja, lajittelua ja asynkronista noutoa.

5. Luku 5, NSFetchedResultsController: Taulukkonäkymät ovat monien iOS-sovellusten ytimessä, ja Apple haluaa saada ydintiedot pelaamaan hienosti niiden kanssa! Tässä luvussa opit, miten NSFetchedResultsController voi säästää aikaa ja koodia, kun Taulukkonäkymäsi tukee ydintietojen tietoja.

6. Luku 6, versiointi ja siirtyminen: kun päivität ja parannat sovellustasi, sen tietomallin on lähes varmasti muututtava. Tässä luvussa, opit luomaan useita versioita tietomallin ja sitten siirtää käyttäjät eteenpäin, jotta he voivat pitää olemassa olevia tietoja, kun ne päivittää.

7. Luku 7, yksikkötestit: testaus on tärkeä osa kehitysprosessia, ja sinun ei pitäisi jättää Ydintietoja pois siitä! Tässä luvussa opit perustamaan erillisen testausympäristön Ydintiedoille ja näet esimerkkejä malliesi testaamisesta.

8. Luku 8, suorituskyvyn mittaaminen ja tehostaminen: Kukaan ei koskaan valittanut, että sovellus oli liian nopea, joten on tärkeää olla valppaana suorituskyvyn seurannassa. Tässä luvussa, opit mitata sovelluksen suorituskykyä eri Xcode työkaluja ja sitten poimia joitakin vinkkejä käsitellä hitaita kohtia koodin.

9. Luku 9, Multiple Managed Object Contexts: tässä viimeisessä luvussa laajennat tavallista Ydintietopinoa sisältämään useita hallittuja objektiyhteyksiä. Opit, miten tämä voi parantaa havaittua suorituskykyä ja auttaa tekemään sovellusarkkitehtuuristasi vähemmän monoliittisen ja lokeroituneemman.

ja kaupan makeuttamiseksi kirjan digitaalinen painos on myynnissä hintaan 44,99 dollaria! Mutta älä odota — tämä myyntihinta on saatavilla vain rajoitetun ajan.

makeista sopimuksista puheen ollen, muista tarkistaa suuret palkinnot, joita jaamme tänä vuonna iOS 11: n Lanseerausjuhlissa, mukaan lukien yli 9 000 dollarin arvoiset kylkiäiset!

saadaksesi tämän eeppisen iOS 12-arvonnan, sinun tarvitsee vain jättää kommentti alkuperäiseen julkaisuun ja kertoa meille, mikä kirja tai kurssi on suosikkisi tällä listalla — tai mikä tuleva kirja tai kurssi, josta olet eniten innoissasi!

toivomme, että nautit tästä päivityksestä ja pysyt kuulolla saadaksesi lisää kirjajulkaisuja ja päivityksiä!

raywenderlich.com viikoittain

raywenderlich.com uutiskirje on helpoin tapa pysyä ajan tasalla kaikesta, mitä sinun tarvitsee tietää mobiilikehittäjänä.

Hanki viikottainen kooste tutoriaaleistamme ja kursseistamme ja saat bonuksena ilmaisen syvällisen sähköpostikurssin!

keskimääräinen arvosana

4.6/5

lisää luokitus tälle sisällölle

Kirjaudu sisään lisätäksesi luokituksen

56 arviota

Vastaa

Sähköpostiosoitettasi ei julkaista.