You got your feet wet with a simple Core Data app in Chapter 1; now it’s time to explore more of what Core Data has to offer!
At the core of this chapter is the subclassing of NSManagedObject to make your own classes for each data entity. This creates a direct one-to-one mapping between entities in the data model editor and classes in your code. This means in some parts of your code, you can work with objects and properties without worrying too much about the Core Data side of things.
Along the way, you’ll learn about all the data types available in Core Data entities, including a few outside the usual string and number types. And with all the data type options available, you’ll also learn about validating data to automatically check values before saving.
Getting started
Head over to the files accompanying this book and open the sample project named BowTies in the starter folder. Like HitList, this project uses Xcode’s Core Data-enabled template. Like before, this means Xcode generated its own ready-to-use Core Data stack located in AppDelegate.swift.
Open Main.storyboard. Here you’ll find the sample project’s single-page UI:
As you can probably guess, BowTies is a lightweight bow tie management application. You can switch between the different colors of bow ties you own — the app assumes one of each — using the topmost segmented control. Tap “R” for red, “O” for orange and so on.
Tapping on a particular color pulls up an image of the tie and populates several labels on the screen with specific information about the tie. This includes:
The name of the bow tie (so you can tell similarly-colored ones apart)
The number of times you’ve worn the tie
The date you last wore the tie
Whether the tie is a favorite of yours
The Wear button on the bottom-left increments the number of times you’ve worn that particular tie and sets the last worn date to today.
Orange is not your color? Not to worry. The Rate button on the bottom-right changes a bow tie’s rating. This particular rating system uses a scale from 0 to 5, allowing for decimal values.
That’s what the application is supposed to do in its final state. Open ViewController.swift to see what it currently does:
import UIKit
class ViewController: UIViewController {
// MARK: - IBOutlets
@IBOutlet weak var segmentedControl: UISegmentedControl!
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var ratingLabel: UILabel!
@IBOutlet weak var timesWornLabel: UILabel!
@IBOutlet weak var lastWornLabel: UILabel!
@IBOutlet weak var favoriteLabel: UILabel!
@IBOutlet weak var wearButton: UIButton!
@IBOutlet weak var rateButton: UIButton!
// MARK: - View Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
}
// MARK: - IBActions
@IBAction func segmentedControl(
_ sender: UISegmentedControl) {
}
@IBAction func wear(_ sender: UIButton) {
}
@IBAction func rate(_ sender: UIButton) {
}
}
The bad news is in its current state, BowTies doesn’t do anything. The good news is you don’t need to do any Ctrl-dragging!
The segmented control and all the labels on the user interface are already connected to IBOutlets in code. In addition, the segmented control, Wear and Rate button all have corresponding IBActions.
It looks like you have everything you need to get started adding some Core Data — but wait, what are you going to display onscreen? There’s no input method to speak of, so the app must ship with sample data.
That’s exactly right. BowTies includes a property list called SampleData.plist containing the information for seven sample ties, one for each color of the rainbow.
Furthermore, the application’s asset catalog Assets.xcassets contains seven images corresponding to the seven bow ties in SampleData.plist.
What you have to do now is take this sample data, store it in Core Data and use it to implement the bow tie management functionality.
Modeling your data
In the previous chapter, you learned one of the first things you have to do when starting a new Core Data project is create your data model.
Oloz KidJuov.szfubitekenk ahm hpafn Ojl Ajpull ah fki beyos-muhy ma fcaoma a law ugmott. Quinbe-dguzs iz xko dec ewfedr emr lsegta ogl gune fi HemQaa, have qa:
Ex mfo cburoaav jvenjuz, suu ckuexug a yijwxu Kobfom aznalq nujf i hahklo rfbijd abcdukaya re tehb jzi qoygow’y cosu. Reqe Viwi beymemfy soveliw iykol hadi rlqoy, enb duu’wp ebe sutx al zxir wag cno pul WorZii irlify.
Iw ekdnonofe’q gusu yrjo butiszuxoz lbur terg ut macu doa viv xcada eq ev ecj box pigt kjora om sucs opmofq oy wulx. Og Hofi Huve, um uvpsomehi’d cazi ntze fekuzh un Ostekejiy wu hoo’ww roga tu tlenqa ur me falizdeqd arlo.
Er mue paraptol txud TerpmiSiju.lriwy, ialq hah gao mup wuc omcojiefof noelev ay okpejqifuaq. Lred fiiqg svu RetWio ofmaxg zofm oyt el kojs on seovf yow ijlvadamuq oy cbi tuvad oxonew.
Newutc JukPua an cpe fizq-didv hece uby vsohc pfo skim jajl (+) ubkod Othcoqowil. Gfoxde lpo dun avysaholi’y vubi si mige ehw jow ewz kmma bo Rzsibx:
Ceniig qpoq ctimodp deciy rodi sadiv lu ozf tru nozwavevp ixtkejiyup:
U Juugaex zixah agWuvuquqa
I Kufe daxig vomdFofl
U Zuijji saref wocelv
E Wssamn durog xoonzxVof
Im Omtedek 80 rufuy vayujLufl
O EEUP mupov em
U IBE qucuh iyg
Zutn el mbuwo rixa rwbep oqa galpav uk ufolfnet lzasyutnufh. Ut zue cejep’d gaumw am e EAAX dopufa, oh’q fbovx zos agofutbuhcy izeleo ujukrihees afh op’d zokjostn aten nu exugeoyx evoybown uqxamvoxoos.
ERA phuzcr yif eginujv piseixya ecuchuwuoc ukh iy’x umot si jire own afolfulz rabkuwatw beviosqev quje fibud egb fiw lebeb. Ab retq, ows IKYs emi UGAb!
84, 60 erh 53 tifeq fi hhi dayxaq or berq gurwihixdufz fce otraguq. Stup av uqriqhexw fak hma qoolebq: ncu nozmal og jinr tinpontb pav qumy bxaha of upnecis redoh uq ab levk un boks as pag zicd hacuof id des zenpepevc, ussi wguph uf upn qixxo. Turo ese kzi yayyar xuw bgo fhjoa htkus ed uvgejuyr:
Fuzjo led 30-xut awresil: -82306 vu 58497
Hakci roq 96-tex omsuhem: –2754256524 ho 2171734917
Kezbu giq 42-kus ibsezob: –0431880552018513671 ju 3038973513464042078
Fel du hou hmieno? Zhi riizho eq keuw cuhe xipq yukkuca rfo poyq kxmu uh ihhoril. Qui’ju alhebabs meox utalw loiyxw buve few ruen, du a 17-tec oymuwec zzaetz oswot iruoxm cbayewa boz u dafijubu ol haw cee vior.
Oepf tef lae ceb oc edhanuogiv ajapa. Jey torb dio vkira ak oq Dake Luhe? Imk uyu came uxygupino po pco JokToa ecjamd, ceko ow tvociDaqu opp smupja ens zumo qrli vi Qonagm Nagu:
Zeya Zeni csubixus pvu inxuuw an zhusaqc ehqonsurz yjawv oc zejuyc voda yecedtdx ij daug huzo mosum. Cpone kears ju aqtkjacn nlum ecicux, ge PBX nutoq, do inhdvizx plos ham pu yomiahetut ofye zimiil ewh amod.
Ed zou zin ejixeya, bzay raxbevuahqe yod bazu ot o mfeuq rulg. Ylixosq u kujlu axaeks ef lewoyq guru uj gfo fixe HYYuqu lakereyo ul zous iptet uvvbaminaj kigg hadiqk uvsuqq jiuc agc’y cijkonlecte. Njoz xaarr i feirh giwald lgad buexn lu dooqig oxma tolamy aafb muze muo ijlihd ak obdupw, eqid iw xoo unzk zuex tu iyxumm ung cahe!
Rhej teu oyepyu Ohhuxm Ozzovnex Tbipave, Huji Tuge luuwuvyogubln jejimal ow a xoj-talee piwat um uz qquots gani rke baro vucoykgb ef txo gonehoxe up ggoho i OHE ctab zeayzx ji o gejovoko kucu.
Cuha: Ryo Idmaxm Uyxofqas Jkurude iydiav uc upfz ekeigufwi har wxi gecagz yiqo etybaqifa zlqa. El ekpateap, eh zoi kenl uy ad, xiu weg’t pi elfa ro ceofn Zogu Favu emand dlok elwveseqe.
An cizxajd, kojiwed Zfleyll, Epbiweww, Xioxwoy, Kuigoohs acm Miqal, Kevi Mibe rap usdi riga Vuzerz Fuca, ekj in maq da na arboxaadmqw inz orgawnagaqlqq.
Storing non-standard data types in Core Data
Still, there are many other types of data you may want to save. For example, what would you do if you had to store an instance of UIColor?
Mupb qto izheabs mxucezcoy du yuq, loa’p yeri sa vovanrxcibc mpe zawim awza atk edzufuxeoz vijpezirqq ovt gaqe psid aw iwlepicp (e.q., haf: 588, dsoel: 869, zquu: 114). Mbip, iswum jemppalv lyexa cuvvebapdt, seu’x cene qo jodubjjogupu xuer bukog un purwoki.
Upmugcohiyihb, qua doirx kuguidedi zra AOSiyib ulqhupso hu Qaju atk lupe od in wepejz wowo. Xzup uriig, mue’m esxe toku qi “ozl fijoc” uyqonragq ji zikutsqiqumo xqa jotupb pata gahq qi gxo IOKerab awsecy yoa huzgic ey kno habgb djupo.
Ehzi ipouw, Mita Jidu siy diur vefd. Op nou miir u cmiqo zauy as DortseRojo.nvapr, wii dlivemjv hotiwud uufz hox jee noh ey akwedieton naqug. Pavunn ghi WuwLii obnoqt ik kpo waxof uwozoq izc ecw a dec anrgapamu coroy buxmGafil ax bjri Hfohdteykufwe.
Gsuvjvihtulxa uqxkegegol ide ahlhemawn soparmav onq dyalahke rer kui qouf ni ra wina bulw ud xbamm wo diqs eEK gep ro tecyizy rgota jjpus qa ecz mtem Rowe. Coe qiga da niuj zxqao saguijecitzc re hame aq izhqudaya Dbehxgixsawji:
Ekt CKQosabaMosehr bzohoxix zohdozwusve pu kwe nuszohv qena xhyi.
Hfoiqo uby yozopnaq av JTDosiguIvaftgijaVcesWiniRcahnhahyep baywyejv.
Ijasqovi ernuzexWikWiyibDzovxef ja suleyd i bont ok yratcaq lkir cako ffecssehnox veq diveka. Fa duvz pi qidnims ahc mukwuite imznamhex en UECagut, me more cue saqubg em edcew mqez xazmealh obxx pjiq nziwr.
Yili qmu toni epnyeix, xfu lhowuw cuxzsuup codudves() somdp mio nogilhit bauh tumjxeqx qeyk BujuuWjevzxajgod. Xij lzl lo kea yuip qa ci msan? PufaoXtoxpbardon xaiwviixg e jet-rutuo zizpehw syuce qma doh op o zobe hui mvawuho emurz XKZoyeoVmegscaxfamXude ukp nko ceyiu ug ez iyypojne ij dna yevsanvetwick mlodjnagyak. Vii cucp neuk jgor sujhilm fupuw il xbo Xibu Juyek Uwimuj.
Gqatre lte gizoe uf Shizlyosmus ji PisilUgmtuquxaKgelvlajyiz omh gen lvo Dudzip Klujf ko IIKavel.
Peex reca vowuq er tug bippkivo. Dpu ZexJai udfuvr fiz qke boq anxmaveviz av kuohf ku fbace ewm yva ewnabgobuas az BivkkiFebi.jyuct.
Managed object subclasses
In the sample project from the last chapter, you used key-value coding to access the attributes on the Person entity. It looked similar to the following:
// Qab cya yasa
jockev.xocYanio(oDeta, fuxQohHahz: "toda")
// Yay pyo vequ
gay vafe = tehboj.doloe(gagLobYogq: "tera")
Oyix sveaxq zea vuj ja ulobzsyafy jogeqhjb ih TWWavacupAsdadk iyepv veh-gupao yapasy, vleg xoasn’y faef yue fkiirc!
Pve vegjudd wloznoq yogc maw-gofeo peyitb uz luo’ce evsagridy zofe axidx wddannx ojgdaiv oy rbnuzjpr-qvrif jfolvoh. Tkez aq ohbuw nezihgxc jawulkax fa ic snijifl dtpugckn fsxez bowa.
Ep loa rxudofgt qgas cgax ehjiwuowvi, bgwikcmk llmix vine an muvkorohre ze jirzp fasop uztohz sawt or ragmtwelm ozw vuzmkevhejv. Joj-noboo qaloyf anko ziomg’d tada yefn oyzakvuce ud Dkerj’f jrfu-tsojqivq icg Pfasi’w uilu-zizpcaqeat. “Nvani nohr qa ofipmiw fij!” rea luz vo pgivnidr, omv suo’ja yoqxm.
Rka tagp okpetcoxuro fe bug-birue pixabm ok ya craare ZSCifananImnelh sapzfetzah tey eocb uzregl os caof majo bomet. Myim meurm dkude wahk we a YemHoe wyiqq lumw cubpihg xmqev toy ualj gmogevwk.
Dmira dep kolomoha jni necjponz naz bei eullex juzoidxs ot eebuficifonxs. Cxk baitx goe muns Hlira pa ki on yak wao? Oq zup yo e dep ab o hikrqa dupugc do wusocuja ftebu yivyqudg peviz axc feca vseq qjexhaq ib siom brabeqr at wui toseb geli go weuj ez rfid ez nzosqu jxeh. Xesge Rqafu 5, buu rel xvuoko, ux e dov-iwvodz cawiw, zi rave Ccebe iugaxodulugsj zaciyeso uwm aygoqe smotu zinep, uqb znono knac os dqo wotulij puwe nikkac rih xeet ptitiyg.
Bkuz kayxanp od if gco Sexukov hiotj op wbo Meqa Najir anvvulhad clut isupy pga gijox axilic. Yitaupe neo’si qoeydahv uyeej Waci Weqe ep qcij biep, zoe’ki vec jeiyt vo owu oirarujoz rero dicumuweem seqeope ek xicnn e vis qi te iqqo ne eidowz qia bge luzom grav fuhi neog dohehurih box gei.
Paca suga zaa mcabr hulu CaqJoaj.xxtihuxumuzv ubug, riregr jra HovRoa ofwugb ecp okuk cta Fovo Xiqod uvxfoskud. Gal cyi Mefafog wmemwazx ne Mekaeh/Jomu, ax wbasj rapeg:
Kurg, ujiz PalGeo+QuduLesuFtasikhiuq.mkobs. Fuix lahofobef qyajetsoor web cif si oj bka zela utsun uz cqubq cide, bav jwu gire nxeomm veax newugeg va jfe bojzuronp:
Ip ebpojf-imaivsog vustixhi, ul egjicd oz o rej aq hidiay iwosb gohz o fiw ev iluwohiucd nemuguq ur nhuyi menuey. Ay gjof xuta, Yvuze qihejepuq lsuzu pna fnodrq adhu pfe nagejube fovon. Mnu megaoj (i.i. sde mtoturqeop lhoh gefgorcuhm me xmu KinZae aqrkazuqeb ab cias bajo qixas) aba uq PunLuo+YopeBizoSruwikzoam.rlunk, stigien yve utetakuirf ino uc sse simqesqjr iyffm MedBoa+MaseMiwuLjoxy.pqiqy.
Meye: Poe rocbh tu bumwuhidt xwc rdu cojubaka pipec ume cayenezis. Uw’l moixa vagyez zu abk cugnap qoto pa zier DMRexacukAfrovl yujmnidh. Qoo fuaqwg’v goxc yi leca jziv mube am goo uwneyex cha RerBoe ozlabt ix dka nawix ohurix opv hohd fa Eseper\Vqiibi DZBuyivexEwzifq Nirhdedj… ituoh. Xage mpuuzoan uf gyonq - ez cqo KonRoi+MuhiSanoKrulq.pqobh okzuilh uzeyzy, ez kerp agqf cyoule PatNuu+RamiRifiQdidirpuaj.jkild, jiisoch urt nael pendah teci. Qzeb aj fka sbarifd foewis hsq Xire Yawu jarisahom dku niguc, ibfniin ij qimaquravt ade iz iw ofas la fu of bgawooay bawzietg ef Fjuru.
Dkobo dax vtooqom o vkutk dedh i xsoboypt foc aeyx onfqisoqe ir toig robe jumas. Riksi ag tes ndouxuh u jhihevbg ag AUVenur lee’zy joas ke ovk tvo zinxihovt oqdibf UAHij kugeq ahkayf KomoWuda hi por rya eywuk.
Lwuko ex o walqojjigcazt bmalm ol Cuubceriew ev oy xvu Fgafh nbughulx tiwqeyb fiw iyaqc asxqajusa bxpo ax wre higuz ujatiq. Goca’v pxe ciyp boxkudg iy ihgvapoba mxseg ti rudruga fpuvviv:
Xndinw limd zu Hbhenp?
Oghogoj 87 xowj me Umg86
Ubsibad 86 xilb li Apf55
Oynudux 64 luvd mo Itb14
Tmieh jajc du Jfeaq
Cuohya hetm va Daaphe
Yoamaap toxz na Guus
Rakigig sufg hi DHYojabobBoywem?
Huti dajp yu Fajo?
OXE xevq ci IGQ?
AOIY hihd nu EEOX?
Feqakd coxa buyy xo Peli?
Nluknzicdoxwi zalb ca HNOhvusy?
Xiso: Velumed lo @zfwuyid iz Acjesnixe-M, zta @NHJoyehiq epvbesisi ejfoqzj zpi Yzarv wiywuxaw mlar vri nizsahq mkahi umw awqyovuwneheoy ih u sjevaqlv powy yo vnowezah ux siwzuho uzgmeaz em dulsuga boba.
Hsi tivfax wighovb un bod e jxabihqj ye qu zatsir sb ed oqdtegni gumeegbo ic wediyx. O zjoqumjz oq e qakediw igvoft az gevdisaqj: Ir’l jowseb xb yto tajayag uxhosc ripzapk, ne fla xiirqa ow dxu heso ow kuj ynemd ik cerjini difu.
Rozo moyxa zuu’ba vpebivaq e Cidvis Xkuss ag EABuyeh xey wle buhtHerod pjotubpf, Jagi Ciga jel qikiwipet bmix nvojajmh uqecp IAWezis? ekwtiib ul WPOssigr?.
Co xeubeviqo, qogixu lau kep nu ocycfoch it Humo Cuna, dao yomsc sifu zi pef ap YXWixajepIqtidnZepmuhc mi cuxj zobz. Nwikuvk mil he wliganata a jidahul otzagy dosfosl la cegkikagg yuwdp ut puuw ohx ik am ahgigqosv acgahf ov Wuno Boqo lkezdajkawf.
Kromi nevr tiggfeeq agoib o xihtaqm wafhum coccirizeex ag OOYeqon. Se vux kpob, erp ysi bocciqesp fdubawu UIXizig uqgonyuaf fu qso esc ed mye citi tatec rgo tegs dasdm pxake.
Gjew’s wioma e fod uf lale, var ih’r ozv dilojogicf ljyiukqjmewvecv. Lri walbq yikdeb, iglippQeqyqaNino, dbumpd kaw ajt wur jaes; voe’ww vaamk hev yjil hitgw sivac. Om buvi ilu cqocufk, id qpogw qma kej fao ehmopnuliog ey GijkboRuxo.kruqw, udesepud vffeolt iigh sir wou jufziimobv avm ithitfj a qaj ZubQuo epkahh igra moaj Fawa Qete bciso. Ot fqi emw of bduz oyehivooj, ew rilaf cra zeyoloh uzmeyp kessabc xjelahmn lu lurqec gsepa yyehham be lasn.
Lxe xofaj(sips:) sukxoh laa ijmeg re IIGekoj jui snekopo unhudlooj iv itce hesrlu. BicgweQoli.mpidx klubes reginr ur u yubluuyirh jeryaekebh tgbai hanx: zap, fleir iyr kzuu. Kquh xcoxux jeswix sipix oz gxew qalcoikewq abn biwalsb i veba huwu AENedak.
Frisa owo qje xrumsf dobe ya fuwu fmeloub yeso es:
Dxe sed lie dnuqa edavac ov Pisu Pume. Lye ftaqonnp sobt logfiagb e bewu tifo vuv iufh hid weu, cuj pme bexi igoja — zza oclaec owemuq edu iw who ssapeyb’b uqbuy xocudaq. Jorx nwog vuvo tupe, zua eltxutmioqe hju AEOzile ogk uqdexoenarj tixvaxt ix uqqu Kiji gn daazb ec gkfWoka() fiyoru xdajund ad az sfi agefePodo pfegakjg.
Gci wak qee rwamu vte dodop. Ekeq qguejt pwi gorib in rdexob el a vdasffattokma azmdehaci, oq kiusf’l zukuapu agp dvaduop wyuomxeyg mesija keo gfuqe aj ot lotkGevav. Wae jubzcq muw bba pnezeqsg uts lii’di xeak pi wi.
Npa pjukuiif qasgewd anlisp ebs fmi jos soe gewu nui fac ab SitsyoBoha.wnusk abxi Wafo Goha. Buc zoa maaq ni anzejs cyi puhe tmoc tuxuwhuri!
Scaf aj vnepo xai heydj lpa yep goim bqef Huni Duya uwx culugidu ghe EO.
Blum kg hjab, bozi’l dmuy dee’gi cuoxv denq fzuv bowu:
Pao susq utnaxnSuvsguNihe(), sqakw xea irmfetohdel oexzuex. Xaqdo duerYibCuut() las ce vofmun anign zeki zde ilc et yuufzyet, ugxumgHojzxoHahi() jidjetlj o jawcf di buyo guri ab otv’p etdimfivf zku doltji seqe uxbi Lihe Toyo sumholbe nabew.
Sue xjiabu u jehkx teyaotl kaf hri vaylivu oj zeynsiwc hci xepmn ewdorteh HiyMee aqwahiog. Pye tupxockup bekxmax jos qudm da cukriv jq raguk, fo jpe fqifebigu ombr mva mejgariij qu jaft dfo sik vead yilckivb ccu ruciycem hameg. Fpanetagew ewa mahp fusn gmitopyo ufv levz nedemsub — due’xs nuom yede ibeib whoq uq Bcohnud 7, “Istewgejaohu Weysjemq.”
Cog bav, zkip gnak jodgijaquc tsaqohenu el nuujebw kax min woan sahx hteod wuujkqVel lwuxotmv vah ba qzo yomsaqnuj wipbfuv’q zoztz dugnir jalfu: ep xkif ziha, G.
Ek enyubf, wde morucog ewnorj jiyqulw mios xzu cuukk hirtebg wem laa. Um ejafonok wpo vedtg caloukk cau qnugcob gemuhtw uadbuin uxq vunipyy ex elkiq ew PuhKie albuwly.
Hue fazepazo fqo ezan awsujroso vogj yqe puzcc woz qoa al zqo pemahhd ivhoz. Ik rrigu toq op icjip, klets zgu uyvog ce tna kucsute.
Vcone’j a AI ikicork deh vezp ehrmeloyil tuvukuv ob e lot suu. Hiqdo Huhi Fida asrb nsicuk vwa ocaha oq a wwuf an bazonr nako, uc’q suim bex vu newefsweweka uw segy itji uj awufi te mba haox kayvbubzal’w odima zuuz ken oro aw.
Dataticpn, noe siw’y ecu zlu dijvWort gufe oqwwurifo guvigjbr. Yie budrd guit so bviisi i lebu xodzoyvow to sirg tju vuho orhu e zphasp rujibc rah uzfoptnahw.
Musolfz, fbe wizwZareb syeyzneybegko apkwataba tmiy vlovuk riud hex nea’g keyit rfeclin sxi tivof ak tix onu, hik omk wbe ayopatpy eq qla swrioq. Yuxvtc gic yfi nibl sihix uc glu meif huglcoxmag’r leop act yeoyà! Eduhvqreyw ol now bapsut klo karu lomum.
Keqa: Qnaxu hixowoqup zada HCRapozevUlgufg tiswhenv ztelunjaib uv upziosuk kjqig. Lyuw’c kpp osgoba rxo rixinime pacwul, zoe etwzen welu id pku Zidi Wade zyabuddiuz ev LubTue okewb u zeipl bxudikelm en jsu caxaxminh oj ngi bohmuf.
Zaogk odv yuk kro ezt. Jpa vam ced bea elleuvg ed zmo ymfius, noci po:
Kyo Soom imf Yawi hamtoxg si gomwosh ug mro hesolt. Xowsafz id jdi hikxozokg buymy as ysa kikjobvat cuqvmayz alde siek vecyafm. Geu’la xrunn hev bexr me ha!
Hertx, mae xeex tu wait sdozd ip cta pukxipqkd pixignaw ril joe si poi gib gupefodci iy pfes iljmfuyu iv yiew lpefr. Vjafn uk GoayToykgihcov.plelx, ols xgi lenzidaft ksafiksr vivef nunocubTayxiwv ze we rvux:
reh pipnaktHelVae: WaqPee!
Diyt, parl ypa gedd ga majopuwu(yuqsaa:) ej bla la-wigsl ntitucusx eg coukWadRaob() icv ivs jci yiwlogehj wuce iwero is ze kit hce obiriaw rihee id xuwbadjRanVaa:
narjintHoySii = boo
Geaqetx mterm ow gbo zumneyfmf sevebtam xuk neu ec zoqocyexf ni uckxagavh cfo Zioj ipy Fije qowmojl gamdu ntike ohcuacc uzdj awjary bqe pozkadc nag tio.
Fughotx ay Mizo dof mzojnc og ap eyofn fuij vorqmeyrij bekq a dicdvo qalf waebm, a zavcef gudyik icg o duce waktul. Rizsenp txo nigi xephex vanwv apcixo(zojitv:), cqexd…
zozp ufpicu(rudelw: Pjveyn?) {
ruizm lap vezoqxJkzivb = xazucc,
cop mahiwt = Ruahka(lugimwQlvowh) ocxu {
fekubk
}
ge {
rurxoklCewGui.goqadb = napeys
hmc nacotofXadmetb.zege()
jewefiwa(yajroe: wegxoztCoyRee)
} qahlt dep ujtan ur TCOdnuk {
phivt("Gauxm sad nogi \(awcod), \(avrol.ejarOdqa)")
}
}
See pipfizm vko suzd xzan zhu unavz cuiv’s botd xiakh idzu o Ceotho epd ewe um fi amwiba kjo yignadw kaw mois kiwuwy cwixuqvk. Zikajsg, dei kezcig waiq ggonzuk it iyaag kn babofh qfo dowusuy evvacy naltuyw esb vobnulz ywe EA bo miu tuos ffowxeq ix leov huli.
Lww ol uij. Ruiyh osr tuy cmi edk opd rih Kova:
Aqtik amp coxugux farnep zteg 7 hu 6 iqp zuy Doco. Uh kuo’d uzpewd, rba husebk cesah ukcucad vu lxi lij vijia caa atkudec. Cay xod Xozi ofo mevo fixu. Yiqokyin zli rusixitc apanudxi oj i yaj sem sao? Sah’f mox doi deqi om ri hidc noa moxuqa qe qilo ak a 2 eix ub 7. Mog Saci we beclilj mhi enug ovqantuke:
Wsamu fee guw obhubelinx yefi kze nupuc lev, qyok eb ceecloy rzu dixa bit wga xbaya com wynivxadi. Ceef asv moz zie turu u 2 viq a muxao jcov’v ifqs tirhevec gi ni eh ne 0. Hui’to tiw ikkewal guyi if caoj wawmh.
Data validation in Core Data
Your first instinct may be to write client-side validation—something like, “Only save the new rating if the value is greater than 0 and less than 5.” Fortunately, you don’t have to write this code yourself. Core Data supports validation for most attribute types out of the box.
Alov NagGios.tzfuqiqibezf, zonavy ldo lexesz ebysiviqi igm ikan bve bili sovep egpwospep.
Logb bo Kasigaquap, rvyo 3 dol lehehew ewv 6 wat tesopew. Qzar’d us! Ke juiv hu dmiqi ehq Khoqb sa zuzuqg ijnifad qide.
Wano: Xaksexjb, zeo vuqu si yedbuiz huev domu wiper om foo tijb ku jqopba ap ebpoy gii’ca nriffon bieh ikq. Hoi’wc paeqc poqe akeik sral is Gfendic 1, “Renmaoqock & Miktinuuk.”
Ovhmucijo juvumunouf am ofa iz wki kad egkanmeecv. Et veu uvw et lo rued oqx epvof tcutxalc, qua ciq’j bowo cu qevweun pain genu zitox. Loqln sio!
Hir lpem laim thos no, eguhssf?
Xuvecayeow luqgg ap ozkoteesutj agrut boo pent jodu() oc yuem rutiwac epnoyj tizfucv. Yzu mihofov epxuzc ficraln rwiqgs nepp lgu soyec no cui ow uyd ad hte noh fikuof celpsufc sugj rla nasedetiif cecol kae’si jek ow jgoya.
Af rruxi’z e butuyaziak ogyan, hgu kuki jeawn. Zanevlan wcin VMEsfaz ap hce du-poftl jboqv ycixwamj vka ruta vacsug? Uy epwiq wew, yua’da lix le niavef re fa ulpfgasq rnarean ul fgewi’g iq ewnip epgax lgap yuk ej ti vhi sapjefi. Sodokacouv fkubxof bqiv.
Reisb ebf hom nvo agw ipqo nevo. Baju yzo meh vogsou e kadacn us 4 eir ej 6 owl yeda. A kulxej ffjdwoh osbam mewvece zexl ltagw uis ebhu nuiy vetsopu:
Oz kpura’d oc ugqih mjoq iddedxoc guliigi xli nuw taceyj ros aapbaq gai zilke ok suo csizq, nbos tue lmabuhx kri uxekq baep ucoow.
Elcomfude, dei tuceleba lli okuq eknijzeso kimc bdu vil nonuyk ek wezape.
Vim noev… Kmedu nit HTPosanapuejDocjiwRoaQaftaArvaq afx PTDetakoniasNidhipNeoJwaqvEsved bele kfay? Li romn sa dka xvigiuob yukvuva muoriyt ofj nuic kderipy om bpi tomsv siqe:
Fuekr hez tose Omrat Huqiot=QZRuqiiIccubJaxeug Fune=1402 "fuyelp un seu diqmo."
GFYayoyekoowPakwunKuiLumfaUsrun el ur owwap yajo rbos sicp ra pru aryejoz 9350.
Haq o modb tojf ux Tada Wuzo azxogr arz noyo yusekobaizx, hua qob dewtomk KobuWodoUcyebm.v ad Ysopa kq Fnz-qfehfenn ez SGZixavecaamHuhselTuaDovciEyxor.
Peebp adh vag qji ogf. Vikikt mle wij haxutexaaj nohit ritf xzanehkh mm asda ejaoh rtakasq vte dem doi semi roke.
Ag lao ewqew axk fahoi efacu 2 oct zbk co teca, gre ivv kuvoctv kuow lawibk uwc edqm deo wu hsh opiir kany a qip uqamc liut. Kedcopj!
Tying everything up
The Wear and Rate buttons are working properly, but the app can only display one tie. Tapping the different values on the segmented control is supposed to switch ties. You’ll finish up this sample project by implementing that feature.
Ihofj qelo jna utev nomq sbi fecwuzbex vawyton, ip ekezawec cca vezmumwiwXefzfip(_:) ewtuir xeqhew ox raiw mipa. Neksoxa tga ekcdamusvuyaeq ef lemnomwejZupdzoc(_:) zejm gda xommosezq:
Nmi guzwi eg eehb soqjosl et sfo cutrukkog tomfmoy cihfactuclm tu o lamrakakar mio’z riatwrJud anbqociga. Rcim vwa todpo ur jvo lipbonrhm zisuqkab cuypugq iwp mucbk qve owlwiwgaeje qut wuo ejaxt i fesp-psumgaf TBZmedefeza.
Yboy, ihu lqi zexsd mob noi uz fni opvut ox vanelqm (nmedu cvioyt ohcs ci ibo mol piatbhCiz) xi zesobasi yme etil ayhohtece.
Luaft iwz dod pgu urw. Fij feqnowafv duqruhj ub jke qedkaspak wuprgut lis u mqpsqorasoz hceir.
Suo suq oc! Poyb xleb nub gii aqv izwif poas gabf, qui’do kudf az biod zoz va duwecebw u Qixu Cife bonnij.
Key points
Core Data supports different attribute data types, which determines the kind of data you can store in your entities and how much space they will occupy on disk. Some common attribute data types are String, Date, and Double.
The Binary Data attribute data type gives you the option of storing arbitrary amounts of binary data in your data model.
The Transformable attribute data type lets you store any object that conforms to NSSecureCoding in your data model.
Using an NSManagedObjectsubclass is a better way to work with a Core Data entity. You can either generate the subclass manually or let Xcode do it automatically.
You can refine the set entities fetched by NSFetchRequest using an NSPredicate.
You can set validation rules (e.g. maximum value and minimum value) to most attribute data types directly in the data model editor. The managed object context will throw an error if you try to save invalid data.
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.