Vai jums ir ideja par lietotni, bet trūkst programmēšanas zināšanu, lai sāktu to veidot? Šajā iknedēļas emuāru sērijā How to Unleash Your Inner App Developer es jūs, kas nav programmētājs, soli pa solim iepazīstināšu ar iPhone, iPod touch un iPad lietotņu izveides procesu. Pievienojieties man katru nedēļu šajā piedzīvojumā, un jūs pieredzēsit, cik jautri var būt savu ideju pārvēršana realitātē! Šī ir sērijas 14. daļa. Ja jūs tikai tagad sākat darbu, pārbaudiet sērijas sākums šeit . (Šī ziņa ir atjaunināta uz Swift 1.2, iOS 8 un Xcode 6.3)
Pamatdati ir tehnoloģija, kas ļauj saglabāt un izgūt informāciju iOS ierīcē. Lai gan tā ir progresīva tehnoloģija, kuru bieži ir grūti aptvert, mans mērķis šajā ziņā ir vienkāršot pamatdatus, lai tos varētu viegli izmantot iesācēji.
Es sākšu, sniedzot jums plašu priekšstatu par Cora Data darbību. Pēc tam mēs apskatīsim Apple noklusējuma pamatdatu ieviešanu, un tad es jums parādīšu, kā mēs to varam viegli uzlabot.
Pamatdati un entītijas
Kā minēts manā iepriekšējā ziņa , jūsu lietotnes dati parasti ir entītiju veidā, kas ir Modelis modeļa skata kontroliera dizaina shēmā. Entītija attēlo objektu reālajā pasaulē, un tai ir atribūti, kas modelē reālās pasaules objektu. Piemēram, galvenais mērķis iAppsReview Lietotne, ko esam izveidojuši, ir nodrošināt lietotājiem vietu, kur rakstīt atsauksmes par lietotnēm. Modelējot šīs lietotnes entītijas, varat izveidot a ReviewEntity kas apraksta reālu apskatu. Jūs varat izveidot an AppCategoryEntity kas apraksta dažādas kategorijas, kuras varat piešķirt lietotnei, un jūs pat varat izveidot a UserEntity lai aprakstītu personu, kas izmanto jūsu lietotni.
Entītiju izveide
Tātad, kā izveidot entītijas savām lietotnēm? Ir trīs galvenie soļi:- Modelējiet vai definējiet entītijas an entītijas datu modelis;
- Izmantojiet Xcode, lai ģenerētu entītiju klasi no katras datu modeļa entītijas;
- Pievienojiet savai lietotnei kodu, kas no entītiju klasēm izveido entītiju objektus un manipulē ar tiem.
Uzzināsim vairāk par katru no šīm darbībām.
Entītiju modelēšana ar entītiju datu modeli
Xcode nodrošina vizuālu rīku, ko sauc par an entītijas datu modelis (vai saīsināti vienkārši “datu modelis”), ko varat izmantot savas lietotnes entītiju modelēšanai. Piemēram, pārbaudiet ReviewEntity attēlā redzamā entītijas datu modeļa kreisajā pusē 1. attēls .
![]() |
1. attēls — entītijas datu modelis |
Šai entītijai ir tādi atribūti kā lietotnes nosaukums , komentāri , attēlu , reitings , kategorijā un recenzents . Kā redzat, ir arī AppCategoryEntity un a UserEntity kuriem ir savi atribūti un katram ir saistība ar ReviewEntity .
Entītiju klašu ģenerēšana no entītiju datu modeļa
Entītijas datu modelī definētās entītijas nav Swift klases. Tie ir vienkārši jūsu entītiju attēlojums, kas ir definēts diagrammā. Tomēr jūsu lietotnē jums patiešām ir nepieciešamas entītiju klases, tāpēc pēc entītiju definēšanas entītiju datu modelī, nākamais solis ir izveidot Swift klasi no katras entītijas modelī, kā parādīts 2. attēls .
![]() |
2. attēls — no datu modeļa entītijām jāģenerē entītiju klases. |
Par laimi, Xcode to var izdarīt jūsu vietā vienā vienkāršā darbībā, kā jūs redzēsiet.
Entītijas objektu izveide
Kad esat ģenerējis klases no savām entītijām, varat savai lietotnei pievienot kodu, kas izveido objektus no šīm entītiju klasēm un manipulē ar tām.
Piemēram, kā parādīts 3. attēls , atbildot uz to, ka lietotājs raksta atsauksmi, varat izveidot jaunu ReviewEntity objektu un saglabājiet kategoriju, vērtējumu, lietotnes nosaukumu, komentārus un attēlu objekta rekvizītos.
![]() |
3. attēls. Varat saglabāt lietotāja interfeisa vadības vērtības entītijas objekta rekvizītos. |
Entītijas objektu saglabāšana datu bāzē
Pēc entītijas objekta izveides un informācijas saglabāšanas tā dažādos rekvizītos, kā saglabāt entītiju, lai nākamajā reizē, kad atverat lietotni, atkal varētu redzēt atsauksmi? Šeit palīgā nāk Core Data.
Pamatdati saglabā jūsu entītijas a datu bāze . Lielākajai daļai neprogrammētāju ir pazīstams termins 'datu bāze' un viņiem vismaz ir neskaidrs priekšstats, ka tā ir vieta, kur tiek glabāti jūsu dati un no kurienes tos var izgūt vēlāk. Iedziļināsimies un uzzināsim vairāk par datu bāzes struktūru.
Aizkulisēs Core Data izveido datu bāzi jūsu lietotnei un pēc tam pievieno a tabula katras lietotnes entītiju datubāzē, kā parādīts 4. attēls . Piezīme Pamatdati izveido tabulu ar tādu pašu nosaukumu kā jūsu entītijai, bet ar prefiksu 'Z'.
![]() |
4. attēls. Pamatdati saglabā jūsu entītijas datu bāzē. |
Tabulā var būt vairāki viena veida datu ieraksti. Piemēram, visas jūsu atsauksmes tiek glabātas ZAPSKATS tabulā, visas lietotņu kategorijas tiek saglabātas mapē ZAPPCATEGORYENTITY tabulā, un lietotāja informācija tiek saglabāta ZUSERENTITĀTE tabula.
Pamatdati rada a kolonna tabulā katram saistītās entītijas īpašumam. Piemēram, kā parādīts 5. attēls , ZAPPCATEGORYENTITY tabulā ir divas kolonnas, kategorijas ID un nosaukums , viens katram atribūtam AppCategoryEntity .
![]() |
5. attēls. Pamatdati izveido tabulas kolonnu katram entītijas īpašumam. |
In 5. attēls , tabulā ir trīs ieraksti, kas pazīstami arī kā rindas . Katru reizi, kad saglabājat jaunu AppCategoryEntity objektam tiek pievienots jauns ieraksts ZAPPCATEGORYENTITY tabula.
Maģija, ko Core Data veic, pārvēršot entītijas datu tabulās datu rindās, ir pazīstama kā objektu relāciju kartēšana (ORM). To sauc tāpēc, ka Core Data pārvērš jūsu entītijas objektus datos, kas tiek glabāti a relāciju datu bāze (to sauc par tādu, jo datu bāzes tabulām var būt attiecības starp tām). Izmantojot Core Data, jums nav jāmācās datu bāzes programmēšanas sarežģītības. Jūs varat saglabāt, izgūt, atjaunināt un dzēst entītijas, neapgūstot datu bāzes programmēšanas valodu!
Datubāze, ko Apple ir izvēlējusies izmantot iOS ierīcēs, ir SQLite. SQLite datubāze ir kompakta un ir viena no visplašāk izmantotajām datu bāzēm pasaulē, ko izmanto citās populārās sistēmās, piemēram, Google Android, Microsoft Windows Phone 8, RIM Blackberry un Nokia Maemo. Lai iegūtu papildinformāciju par SQLite, pārbaudiet šo saiti .
Darbs ar objekta kontekstu
Pamatdati sastāv no Cocoa Touch Framework klašu kopas. Galvenā pamatdatu klase, ar kuru strādāsit, ir NManagedObjectContext . Jūs sūtāt ziņojumus uz objekta konteksta gadījumu, lai izveidotu, izgūtu, ievietotu, atjauninātu un dzēstu savas lietotnes entītijas. Objekta konteksts seko līdzi visām entītijām, kuras esat izguvis vai izveidojis, kā arī visām entītijās veiktajām izmaiņām.
Objekta konteksts piedāvā visu vai neko pieeju entītiju atjaunināšanai. Nosūtot to a saglabāt Entītijas ziņojumu, tas saglabā visas entītijas, kas ir mainītas. Tas nepiedāvā iespēju saglabāt izmaiņas vienā vai vairākās atlasītajās entītijās.
Aizkulisēs objekta kontekstā tiek izmantots a neatlaidīgs veikala koordinators objekts (eksemplārs NSPersistentCoordinater klase), ko tā izmanto, lai sazinātos ar SQLite datu bāzi. Pastāvīgais veikala koordinators zina datu bāzes nosaukumu un atrašanās vietu. Tas izmanto pārvaldīta objekta modeli (instancē NManagedObjectModel ), kas zina par visām datu modeļa entītijām un to attiecībām.
Sākotnējie pamatdati
Sākotnējā Core Data arhitektūra atstāj ko vēlēties. Lai parādītu, ko es domāju, 6. attēls sniedz pārskatu par noklusējuma arhitektūru, ko iegūstat, veidojot jaunu projektu programmā Xcode un atlasot Izmantojiet pamatdatus opciju.
![]() |
6. attēls — gatavā datu pamata arhitektūra |
Kā redzat, AppDelegate objekts saglabā atsauci uz a Pārvaldīto objektu konteksts . Objekta kontekstā tiek izmantots a Pastāvīgs veikala koordinators , kas savukārt izmanto a Pārvaldīto objektu modelis lai izgūtu un atjauninātu entītijas no SQLite datu bāzes.
Šajā noklusējuma arhitektūrā vienam objektam pievienots konteksts AppDelegate uz to atsaucas visi skata kontrolleri jūsu lietotnē. Kad tiek izveidots katrs skata kontrolleris, tiek parādīta atsauce uz AppDelegate objekta konteksts tiek nodots kontrolierim, ko tas pēc tam saglabā savā manageObjectContext īpašums. Apple iesaka ievietot kodu skata kontrolleros, kas sūta ziņojumus objekta kontekstam, lai izveidotu, izgūtu, atjauninātu un dzēstu entītijas.
Šīs pieejas problēma ir tāda, ka tiek pārkāpts noteikums par lietotnes sadalīšanu šajās atšķirīgajās sadaļās:
- Lietotāja interfeiss
- Galvenā loģika
- Dati
Formālāks sadaļu atdalīšanas veids ir modelis, skats un kontrolieris.
Kā jūs uzzinājāt manā iepriekšējā ziņojumā, skata kontrolleris ir daļa no lietotāja interfeisa. Vienīgais kods, kas ietilpst skata kontrollerī, ir kods, kam ir kāds sakars ar lietotāja interfeisu. Tāpēc kods, kas tiek izmantots entītiju izgūšanai, manipulēšanai un atjaunināšanai, to dara nē pieder skatu kontrollerī.
Tā nav tikai ziloņkaula torņa domāšana. Entītijas manipulācijas koda ievietošana lietotāja saskarnē var radīt praktiskas sekas, kas var apgrūtināt lietotnes paplašināšanu nākotnē. Piemēram, ja vēlāk uzlabosit savu lietotni, lai saglabātu un izgūtu entītijas no tīmekļa, jums būs jāatrod visas vietas, kurās tiek izmantota šī pamatdatu loģika, un tās jāmaina. Kā vēl viens piemērs, ja veidojat Apple Watch lietotni, jums ir jāpārvieto Core Data loģika atsevišķā ietvara projektā, kuram var piekļūt no lietotnes WatchKit, kā arī no saistītās iPhone lietotnes.
Jums ir nepieciešama vieta, kur ievietot šo kodu, kas to iekapsulē vai slēpj no lietotāja interfeisa.
Uzlabots pamatdatu modelis
Tātad, kur jums vajadzētu ievietot savu entītijas manipulācijas kodu? Jums vajadzētu to ievietot biznesa kontrolieru klasē!
7. attēls parāda uzlabotu Core Data modeli, kur Pārvaldīto objektu konteksts ir pievienots a Biznesa kontrolieris , un kods entītiju izgūšanai un saglabāšanai tiek saglabāts metodēs Biznesa kontrolieris .
![]() |
7. attēls — uzlabota pamata datu arhitektūra |
Kādas ir šīs pieejas priekšrocības?
Pirmkārt, tas iekapsulē entītiju manipulācijas kodu biznesa kontrolierī. Tagad varat nosūtīt ziņojumus no skata kontrollera uz biznesa kontrolleri, lai izgūtu un atjauninātu entītijas, un šo entītiju izgūšanas un atjaunināšanas mehānika ir paslēpta lietotāja saskarnē. Tas nozīmē, ka vēlāk varat mainīt entītiju glabāšanas vietu un veidu, neietekmējot lietotāja interfeisu.
Vēl viena šī modeļa priekšrocība ir atkārtota izmantošana. Ievietojot entītijas izguves, manipulācijas un atjaunināšanas kodu biznesa kontrollera metodēs, varat izsaukt šīs pašas metodes no vairākiem skatu kontrolleriem un pat no vairākām lietotnēm. Tas ir tas, ko mēs saucam atkārtota izmantošana !
Šai arhitektūrai ir vēl viena priekšrocība, kas var nebūt skaidri pamanāma. Kā jau minēju iepriekš, objekta konteksts ir “viss vai nekas” piedāvājums. Kad lūdzat saglabāt izmaiņas, tas saglabā izmaiņas visās jūsu lietotnes entītijās. Ļaujot katram biznesa kontrolierim izmantot savu objektu kontekstu, tiek nodrošināta precīzāka kontrole pār to, kad un kā entītijas tiek saglabātas datu bāzē. Jums var būt a Klients biznesa kontrolieris un an Pasūtiet biznesa kontrolieris, katrs ar savu objekta kontekstu. Tas ļauj izgūt un atjaunināt Customer Entity objektus, neietekmējot OrderEntity objektus.
Tomēr ir gadījumi, kad vēlaties vai ir nepieciešami vairāki biznesa kontrolieri, lai koplietotu vienu un to pašu objekta kontekstu. Kā redzēsit nākamajā ziņojumā, šī arhitektūra arī ļauj to izdarīt.
Secinājums
Šajā amatā mēs aplūkojām daudz konceptuālu pamatu. Jūs esat iemācījušies par entītiju datu modeļiem, datu bāzēm ar to tabulām, kolonnām, rindām un to, kā Core Data apstrādā lielu daļu no manipulācijas entītijām jūsu vietā. Nākamās nedēļas ziņojumā mēs izmantosim šonedēļ apgūto un pievienosim pamatdatus iAppsReview projektu.