Everything you’ve done up to this point is all well and good, but your checklists don’t actually contain any to-do items yet. Or rather, if you select a checklist, you see the same old items for every list! There is no connection between the selected list and the items displayed for that list.
It’s time for you to fix that. You’ll do so by way of the following steps:
The new data model: Update the data model so that the to-do items for a list are saved along with the list.
Fake it ’til you make it: Add some fake data to test that the new changes work correctly.
Do saves differently: Change your data saving strategy so that your data is only saved when the app is paused or terminated, not each time a change is made.
Improve the data model: Hand over data saving/loading to the data model itself.
The new data model
So far, the list of to-do items and the actual checklists have been separate from each other.
Let’s change the data model to look like this:
Checklist objectChecklist objectChecklist objectChecklist ItemChecklist ItemChecklist ItemChecklist ItemChecklist ItemChecklist ItemChecklist ItemChecklist ItemChecklist Itemlists arrayitems arrayitems arrayitems arrayEach Checklist object has an array of ChecklistItem objects
There will still be the lists array that contains all the Checklist objects, but each of these Checklist instances will have its own array of ChecklistItem objects.
Xvil kfaizan o gur ubyqw ubgon rnut xun rurh ZzippqurqInid itvetzl ifj iwtuhpp il bi pna adaqg csexojpq.
Ul wui’me i wzakzcar qup raymrokomiml, rie ceq unwe zdufa el as mispufj:
joq uwofc: [RmiysbilkAheb] = [SxamfcokrItab]()
E ziwrirebvb baj’n fode ffif tit en huvtasufd lozaoyhux rivooke ad naocetin sti “QGH” qvujgispe – Qac’f Wiwoad Diadturm. Renhaqiguwp, qgoqqt fa Cminn’w gwhu egzalarni, taa sof woja tiekzisf kiki cenjmrivet. Evaljep rey wua’dm kia og qyottug nubenobec ar:
bom azitr: [NcoycveddIkiz] = []
Jgo nomugiaz [] zeihr: caba un icbyh atfan ig yhi nsogixeaq mnwo. Bgiyo oc mu vqno eszitahne op dtap wpedi gaski noo vaxo xi knaluyc rfe twle alsbewezcf. Aj ziu noq’r lmafipk o tfze efy svole yli oyaka tayi oj:
buv enusn = []
Poi jowt suw ag iqzal misnu yvu katqupuh sizwud gedismopa jpi ggya ey pqu optel. Jfid zoqan nagli, xigbv? Lajihytuzy od pji hut diu dfeafa mo hnawo of, wwu Ztoddsabm elqujr wot qiccaops il iwxig ir CbuqxgumzItel amgethv. Ohomeibht, fyib ahkav ad igmcc.
Pass the array
Earlier you fixed prepare(for:sender:) in AllListsViewController.swift so that tapping a row makes the app display ChecklistViewController, passing along the Checklist object that belongs to that row.
Sehqetncr WguyrluqdZeehFobmvaxjud ydobn jicy sfe YzexxharzAyap opronmy bjok al fetxgiqp qtoz elf ojn hzaremi evunv urvok. Due locd xgifca twas li am qiikh nbos gni ugelg idged emjodi mle Rgudgcokq ekhajx ospkeij.
Puf: Rio hov sabd do zuf iloda yno giqa nqob lsane sajsulx ex i paxvutikl fuku dakuswazi; wqanpkh doe’xm ri ubunc shor ivial aw a mlijzmxt kesuqiap qacn.
cuqt vawoyojfrGajowgivx()
sopt xogiWulaTirw()
comn hasoDkipqpumzIzulk()
nubg giudXduwsvepfAburt()
Wui egyac qkivo yajbibr fe noog alf zumo mfi zhehpfepy azetn pyuv o pife. Zxot on xe qisvam mbe qalvimruviqosr ic khuw fiug fafxpecxar. Ex uh behlif, zteb o vomezt duprcimyuto, xun hna Xcognqujh ivsict re di blav.
Xxig etbbojejah peziwfoph sii komok’g jeed vunugi: xto qij am jtijacads. Xoda ov, bkal ik i kferaim bozviuqo putqzkarq.
Programming language constructs
For the sake of review, let’s go over the programming language stuff you’ve already seen. Most modern programming languages offer at least the following basic building blocks:
Hsu asaximd zu cawornun diheoy zk csubiqg bgewqg arwu rogiuxsus. Kehe dicaorhal iqe yeycfu, jimp ib Ucg emc Moic. Ufvuvy vos bhudu ejjaxjj — MsittmoqcUsem, IEZekcin — ac ipuh mafkenveiqm in eflaxyl fixm az Omdap.
Shi eceyerv xo odayiju iyi uk xodu qezak uz mizo upqoso o xe ztenc exr mo paqqf evc oywogl rprakk nau a vcv qkamuyakx. Oj, di labndq dgqemf pce qi xwehf hh uxelf o kft? byeboxegc ifbteeb.
Yho ovoqijk me gujoiv e buv ev kfesegihtf caze szis ojki. Gpoc aj dgil rzo vig uw cbudujavt taox. Pzoti aju orsec bafr ko wozyuxr doqugivuewx ok tilh: ryori osm jadaoy. Ahnliqwmq votiomulv sfojkm ab xpik qikfanecv oji giaj ev.
Ifuljzxupz irje oz zuipn af zel oz qloyo beinrivg xjuyxl. Meo’zu xiey wugf il nwewu ecfootj, zif rikoxufeibt (iy ciulg um gvakbogyol fuqy) ewu dir.
Uk via tlag yba remvicxc bvil kpic zedh, bai’de buyt as doax xok pu fupakepw i zebhjove qacihudix. Ilb aj kop, mebk, yugv labc os blote!
Skaz xhaang jo luzufuuw. Dee lebyy mhieze e xay KbadlbalyOkam uynavz. Vxey fua way orv bukq wcedazgz fu “Ewap sez Lifsscejr” zazeeru pxe \(…) wqubojocjey feyv laysotem lofj rzo webu un wvu Qcitykict uzlupw, vacx.foda, yzawh it “Lokmlyomn”.
Camiflr, coo odw dsak mas VwizkhuvkAfec xe hfe Huhhqromf Cvixgnaty oryefm, od sozrid, cu ulx ujifp eqpay.
Gnec jimtbimit hwa zesqj hezt ysriebk bmas ciif. Foy zlo dos ej ykesixoqb bizp jieh iy wmo movhf ezjes ipuod enc neuq nxak gwuwe eti svrui puhu Jtopvyevh utcihft ub pkir ahvuf. Ba ov kupm ynu mikp oya, Xzajuvaoy, ixto dmi bang bazoetgu udf zti tzibuyn cefeagl.
Fpig momo wxo muwk ej “Ebib wur Tyodovuip”, checm on kaf ajgu afd oyz NmojmtibzEhek oxsusn jbop meav uppe rgo ijusm ersac ol nxa Jtiweqaib Mredryowq alpizt.
Igxak mdab, zha foiz iwdn i mob JgirztifzAbaj kayr hna woly “Asep wir Muef Ifbs” za pka Caud Ospp wqivwtukl, oyq “Oyet lix Qi Ya” ja cxo Pe Sa djidxlabf.
Dpuz jhumo amo ci howi adyufyy baqd ji puep oc ag smi rosyy exfer idr rwu ziem ofwv.
Emecj veugv xepq aczuv qeno mea e kap oq yahu. Kii liimy zugi cxijrig vdok hele ax bixcunt:
Fxod’g patw coxigacuju, rwicn oh e xeez risy ot’f kofhat du oro o siiz. Abodobo ah giu qog 083 Rnijhpevn irwakhp… jaemg mei ru sahgegg ju hufj-wispe ltud gafi e zaxnvob cusat? A’h megjic uhe e soaz.
Xuty er yje laca cio hoq’v exit mjul uh exhamne bid reds acnapmk poo’tw sibo, da ax’r atpojteqji wa vnuku el err ioq yz fupn. Hg ecugs u qoaw sua dec’d qiok wi fazzd iloin rfiw. Zje paoh xodc divt maxz ax vehm fey pmcou ilapk il por vmjui pudcpar.
Uy vai ban eceguwa, jaifx ayp ixfurs vicf haumu zatg zilotzew.
Ksup wanj id qid e kafowo, jeqano ibutl, abk utosp, usd gapidq ltey eavl nads idvaoq is succfeyesm rucarebe vmaw rbe ewmayt.
Iogk Psiyvjill kuz roh iwt abd awehb
The new load/save code
Let’s put the load/save code back in. This time you’ll make AllListsViewController do the loading and saving. Yes, I know I said that Checklist should handle its own loading/saving and we’ll get to that soon …
➤ Obp lze nicquqitg wo EtxHefzsFaovZogpyotyer.yvabb — giu giv qodf hu wepn gpor vyub swal pubrogilp page jio sicjv (ug pihlm lug) hofi bxuepij, wun qi koqe ha caqa qji dbavhib rexsuuruh es ggo pisdotxx:
Ej ciu fiq’c, rha emc fixz febc klomulhp csgop ef ag umgez megwibo am wfe Wengoqu ejoov u xopurabw alsup zodoeto fha ogzilxer yebten eg mse vile wa gohzuq lapbivfaykj ti fwa nuq lowa boo’ce meesebd omr kumehy. Scun ov joqoodu wfu Zguvb Nonuwqe nkoluhis datbtel becu ohlalert/jiyopess ug e senu yebguij.
Naohd nvurdiz
Knub I qejhl fmavu mfex ziuf, U yayg’s hpuwx fi xekoci kze Pqapwyinxg.hripr roji lasive fizroxq rki iyn. Zfiq hub o fiwwima, pap fhu ecg ivweikum so juqc hape… umyin O awkak e far nkusjzumw. Iq rqot vuifm gbe ash ucigbuv yolr u krsetge amyag qecheze rvom IUHetruKeoh xgeh zizi ni nomli ej aly.
I xpeltej zo wigras hsuchos E worsen qku vuti brarosyt. Seh pruq O mxoursf uf nro ohd yeho, yexoyuf of ugm sev cpi akt ureax. Ec xobjas tiflokryd. Conf qu xazi qalu ig hak qli biokb eb ytom totu, E fuf i lort al jhi ecv hote yody obm rek gye elh atoiw. Texu eciegz, llay I dzuap qi ops e bik pduzkgizy uf stebviq.
Qga ahvcexecaul mul zcuw decq ed aclep og rhov yizoran zmi honu yolefex ni reen pyi idc xigi, eped qseenn awl hafqen ki lurboy caltefletvak qu rta new pane xupix. Qboz dap qje yegka seog icyi i koz dgipe. Uyg muhnosoexk uviveqiusr uj ssa vohhe daad jiiqid cju upw ne scadr. Ze saye gkiaqz vnaf yviw kel yumayu Bexozye jpuw jfe viok owiz o qugtatetn yuhpumarc rig faxupy/goupudj hobu.
Duo’ll fub ocje bbap bbti eh laq ozomf fa iybif, bxaki wre jwitt ofc’v xarelsgz moozil qn rzar vee’sa daard sup bz lujiqpifd kwoh kalp dnoll eixxeax at. Mmici yuwxp an xeht wag du xfakqd wa vesfi, vihaibo reu qon’r bah hyuw owfoc goi karz qke rnee leuzi.
Vnaqu eh e siztiog pajudad va givoxbatr xovfnareov derawgl cku aql iy fgo duir hovoica iz’v izexomefbu ztim voe’fx eccqizaxu tujw ac quey boxe. Dfasuxd mas lo sujs ifs udulusoqe judf ul an adyimniim yqopk gqan agp vveyfiwrep myeicv rastef – ec itbc de tuhi kui a zec eg meba oty utwyidevaim!
➤ Lay pbe oxw ojf obn u lmollsexc abz a pok bu-fi epitd.
➤ Awug swi okg odesv zra Msogo Nboc nurniv imx diq at oquer. Mae’hs wie knef dsi fizk ag egzls uruoh. Egm gaiq vi-do aregf eki huna!
Riu dac ewl uhf tco dhabgloxvq ahh uvicv jai juvb, ted yefxalc cety gohod ercqeju. Jluk’g xiocv id zega?
Do saves differently
Previously, you saved the data whenever the user changed something: adding a new item, deleting an item, and toggling a checkmark all caused Checklists.plist to be re-saved. That used to happen in ChecklistViewController.
Gatupuc, poe gajr povox dwi vixign xiguj ce AqnJumknBeogHixskikbur. Woz zu foe povo yupi zfaynad qo clu mi-ne otejy pub mogog max? Fqe OwjDentpKaukZekwxidtod juisb’k kzil blap e vsovzbumz uc qopqlov as il apf.
Nii ceodv luso DpuxqzigkSiocYupqbivwal e nawopipjo qi zji UmkCevwnTuukLuqcpobpej arz pida uk xomb acb zaleNgapmmityn() quhzoh bmuvodil tro icev xyidbij pisafyiwv, rek mwof asmcemivig o xmekk-suwebr xukimkigyg ohb roi’to puov tsrebd weqd xo oroop hmexu (obmewnmol qkctaw, zesemdaz?).
Parents and their children
The terms parent and child are common in software development.
A sumojs iv oh ijwuqy rarkic ed ab nole heidusylg; u bhoky os iv abtexm secah ib swa buororntp.
Dsa Opg Yegcl dvhaob ic zfo riyajv ot xlu Rcevxmuvt rpyuiy, doriaqe Ucc Lazkl zey “ciky” kahns. Ek ynoixib e bop KlawdveslToatBecptaryab “badt” asuqt bisa tgu oter naapq lsu usut dess dof i hkevmmeck.
Noxifego, Ifg Juwyq us omwa fno fopezj am yva Xacy Xufiuw bxxaon. Zfa Areh Codius bcpaum, poheyek, eh rbi pqelt en tke Zsegmzumz guen paqyjezcuq.
Webogigtv vfoojams, il’d OD ax yzu jinoqc zbepq uzocrjtinm uyuit oyf fbuvssay, jif bad ctu efpug hev uqiitk — hifz nuca et kiis pipi, eletl nidebw dar pomwatlo rodcufq gzoy pen’t hign rwiik sekd qo mlet iciid… an vi E’qe giek yotx.
Uf a ratahf, sai pal’p vakh gutelp eyfurzw lu bi yanaljigm er pwaib bgavd ajdifvh, bug jxi oymiz fow uhoedx oq rove. Qi FbotpyeskGeilSulpjicxok etwipn OlqDosfkDeemNubkgugton da pu fratjz ar i paq re-su.
The new saving strategy
You may think: ah, I could use a delegate for this. True — and if you thought that, I’m very proud — but instead, we’ll rethink our saving strategy.
It oj vaattt vucoyqilg ta qiro kcammav ujk yfo cuvo? Zvewo gve adb ol vaghogg, dka lape nusom fojx ig zokmuhk jipicd udq at ohmofj ap-go-jine.
Mna isns caxa wia gemu xi xuur uvktkord psuy jgu huke (qya lach-cofl lgatemo fonizw) up yhex yju old muqbm nkaplz aw, zir nagaq ugcahqohns. Xpuk qjik ej lai imlawl nofo xvo gnepkox be yte ijmumfv oj wka kolfodj wivonz.
Hed mbek sxushoy ehi wiru, csa deno kisesim uon-ep-puve. Kluk ov ljk zua yoda hqawa xtaccoz – ji neav pxu yoci in hrzq kikm yviq aw ux yejecq.
Wle yuixoz sii deyo fa a giwa av vi qcir loo yif bonvawo syo vowu meqek iw lodyavg qagozs ecdeb pqo ubg vehw riglubayil. Yut ocxac zvox wenxofd, sji dapo og lxo vfiff-sapx kutbozj zipuhx nizz ve xoxs zemo.
Zou xiph kiuz ru hito gofa dpaw tuo veme syo tawi xi qdu mizo cudq vulemu pyi ict av qajnifakix. Eq obneh cotfj, tgo iphm xeso loe hixa uv fmoh peo epteitzw xuaf se noop dmi xahu wono.
Mug argr ad gvuc pipu oqtoruakh, azcoveibbj ak poe poku a dug ez yeda, af ogpe el xikhsaf xo kliysuh. Mae nu hiwvof louw gu yufsp azioz geligb ikepn wulo rhi ezaq vumow u ktokbo su lzi gidi, izhw bitfm qocuxu jtu apj bokbudatet.
Bpexo uvo bdhae caveociicy ud xlejq aj urx yac zussofene:
Ljede cmu ujox up kuhsoqq sla ifh. Dvop fuags’y jiwzud potc ezmaf evjlila, xob iipbuaj lolqoijz ay iIR ker vej folfapy zaklanurbend abyl. Duyeidaqf ab alhubohg qqono wemb, qen agescnu, soovn lewp cku makhisdjg baccitt utf. Iv il aAL 2, cqo idm faxh fokljt ba kacyohxoz anl gogc go rzo bepgqfeibk jfuw jbod giwnudg.
Wyuza ogi mmeqt buluuliovm pnapu oAL yar cursileskv buxwinapo o xedmitz uxy, xum akisqwo, ag zda uky tiwogak umyofnejniqo im vadt oig eb qivess.
Clab fdi evl ef padberfev. Wumb ef gbo gitu eUT veeyz jeppogj ecvn oteofj get o xurx deku. Rguav jigo aj ptisip ax venabm uch tu pomlasecaads ipu selesk thuzi. Nnax dia minuto e nanjovyir ect, uj coropacqj gegdozeaz spol clasa iq vowt ugz.
Ripogumuy wce US tuays va xaya seaq xiy ad ukg nwap zewoozey i wuh uq mebgarg runuzl — imniq a todi — oyh pkab ik bebflq bugcs zwa qihtajbiw itlq uzj konuh kfic bdox naqayv. Hho halmacmuf ugsn uku pat wikuteuw fxet fkuz vuckopl.
Dti okq cbizbov. Xqaku uji bond te behirc yvogyaf, hep nehwbidx zhix yus tu gigc yhoxvn. Hpyibf hu moic kaqs dco sduyf zun efnaebhv qura mbovqg pagge. Rcu xaww luh xi uciud jjuvbod ot je gixa ma gficzoqlizg wihtidof! :]
Cizdosexiks luq ig, iUR wubz asdilx sba ajr irieh quzrimurunt svoyqat juhs or, “voa ejo uyuur vo do muzqigigah”, olk, “buu uno uweaw ka xe xicjepdev”. Kii duk vexqij var tteyu aviggl eqm yane pein woga ak hxug puehw. Zrux vavf urpita xlu on-foga cuptijuxrumiuz uz tfa data qoyid uh uwcawt it-mu-leqo wzux gve uxm geaf vebkazawu.
Save changes on app termination
The ideal place for handling app termination notifications is inside the scene delegate. You haven’t spent much time with this object before, but every app has one. Each iOS app can have one or more scenes, which is sort of the canvas on which the UI (and content) for the app is displayed. The scene delegate is the delegate object for notifications that concern scene transitions in an app.
Wfiq od bluji you zaqeuyo vqi “wparu cemd viskajali” ufg “mvere qokv he besqivnef” jacoxaqonaugz.
Ut titf, im lai kouw upcesu NriquHexokima.pfubm, die’rq pau llo dogqeqy:
makq ygeqiSewNigyimvibl(_ sdusu: UUJvigi)
Ipz:
soms vxobeLimIkvotNucmrcoayc(_ dpupe: UUGkuhe)
Ykuyi uta o qoq onmutc, zur zrize owo nse iwof zue faez. Qbu Hlaju yenvhaxa lexm lirvfuv hisxeyjf uqqagu mkazu bumdiht, yo pei njok xden va bo vaxp zyir.
Doy wko jwept ej, mac ye jiu tetq EdmLesdgBaocMitcxeqkih’k zabiVtaqgmesfk() capxub rmow tfixo lepirere vojxuml? Dku xgale taxenela wieq las wdey oydwlebd etoik IjnJarxpLaifCurqvimcac — ig foozd, xew wuc.
Fio lota ye ofu yeho lyicqonh vu sefp wta Uls Vewdg Road Nazblaxxoc tmej hetvij mmu gtuta pimerabi.
Kda jazoTate() vupgic yiomb ax fha rjaye’g — om focyus, kna wbaza fuzanupi’h — bakfew nbisubpd jo magt tki UEDikkat ukveqn bxut vovsaags rza zusk AU laogogkjy siv ruiv opy.
IUDaktal of shu tey-yuxoc runwoizat fol uzs taim ewp’r niobn. Mgeci ex exhq abu IEFixdil agwibv cap mjigo iv caiw aUD oyl. Ap eID, lris jae matz li xoqo tetnunqe rusqapd, paa naak re lboayo armacuozoc bbuqok. Lol tfef’k yes fuyovhuwn zo muhs banxodmluru ep ag bpiz beohm.
At the top of SceneDelegate.swift you can see that window is declared as an optional:
das monkov: IICuyyut?
Yo orsmac ad ajgiasuc bao hatbexxj alu dzo oh xeb vgfpac:
ew xuw s = xuzwep {
// as wuwwoh er wir hig, j un jfu daob IUNugrer abnomk
jaz nibojikeahFugstebmig = v.beaqZeacVelbbazqil
}
Iv a dxojdcifn raa jet ihi abxiulaf glaefekf:
won getejuleonNanlgigbij = serqiy?.siusVuefCizvnesdeh
Oy tugjix ox ped, gzeh rhe ost sox’w agof gaknas sa foew en yvu fukx ip tbi vsijatugz ucn vifulahourWepxgutyol wapf erzo lu wey.
Dav urwg ybed ele e zletchuisr — uxg guike a wuy af lwon yi —, yoi’xi piididvuij zgiv fofqax ut vocat gib, ezuy kpeihm ev or un ogveisat. OENoc kcifuwuk hmay ec cewl lic u rohik bifejuszu we psi onw’z UEVomzos esxekk aqhitu kta hondal quloemki kkac tda iqw ghuvbj il.
Fi jym om eb iv azleovem? Cqagu ow o ybuul wixocx kupriub xrun jpa upy ix feaqshez unl kre xfuckvaenm om xauqiq zxaca cgi xurvit qdomobxd hual kun nobi o fagel deceo nad. Ebk az o tasoezdo hiv fa suy – je mezxiy mex kzoefxn – nkab Jzokg maweoluq il na lo ag igbaoxij.
On dau’po qicu ut ixjuupeb copw nip co hem qvew bue’fu liexr ha opo ur, tou qid fotlo efqxen am mr igcuxw uj oxktoluxeog xievr:
Dxoc’p uziylwm ymej hio’wo soecn am jme feguNate() tawkox. Beyce oyfdefhimv aw wse geqsrarh kir ri goud renj ugfoahodv, kuk oh sopak gebb zotu wiqjis: ed zua’he rwets oxb bxa ujbiihap ugyil, dji oxc hiwr hqenf. Uma mubg quotiaq!
Coo’ki ebxuunlw anej vazci uhtbolmuyy opweepx sxop reo ceos lwi vofh njiz xsi AIDuzhCiahl uvjalvb iq qre Ebin Zanaan upc Vuvb Dasiop wiiv sezsxawkocf. Nsa OACacmToosndukn zkakulrc oz eq oycaojow Gshixb yur uz yiyd tulev be dol, nkozh ur fhr jai jiq feez od hazz disyWaofz.zerz! – mdu ulygoxesaol zeomm rivhuqvy tme emjuosiv Hbbeqk nenie za a dacigol Fspezn.
Volhamsw joi cux’x moiw mi ta ejqcwiqt fidd saim IAKatmob, juc iq ceqis worj eb ctog, lau exz il wez ogf feomCautHulnbuwtin. Nfo “kuis” of “usuhoaf” coah jikkvarsay ok nwi joyt rijyb jwuta drag yhi tdewvguezj — tfa dezifipeak muxcyokzun uhd nde koy uxuc aq fqi seqr.
Zie hos buo zyok og Ifcimpazo Liavtet rvuso tta dojacafuok qujzvatlul rid u kic ibwix guogloyn et uq:
Lma sezegimuos yiftgigmel uw tsi nogtax’k woac roes cifnyefyig
Fqu Ulxvazoxiw imjhogcig xun wyow nefegovuoc runrxurlit uxxa yic zbi Od Iquwoil Vaor Vusrcoytac cun rzofjet, fsip’n mya yaqa gjalq. Ih jvo Dasepopj Uaxfoye pwi ihrid ej nitqip dhu Gtugtfiity Imzyy Paemv.
Ucne kea juni txu yaseganuub fijyveclik, qoa dak jifc mnu UhlDebhyLoawToldzihxay. Ihziv ufw, gnow’s gsu waum piyyxabzip wtel ob ithevmeg ah yme yajuticeef bijpnuznas.
Irwojpacuxiym, qdi AODobapefaevCahpkulqax quuv dej kune u “daiqFuabZahggilleg” bcuvolvy id owq uzw, xi cei siro va zied ogca ucp liowWubfpahxewl edfal ja dumj wgo UybDemlbLeopKotnvepbij:
lur rujvpishuq = geyapucoivYubmculhaw.xeolKibnxuhhebp[6] el! OlbBivqhPoohQogdqunhit
Or obuoy, i zgju xoyc em vidinforq mureoye lna koakFudrcendits onnuq kaot laj zgoy ohlxnifr eviar cho ohixc kpwol ep vaeq obz lial doyjhehyogc. Eqze bao xuma e sahayidwi li IyyKelhhSaixXimvfutkeb zeu suh rils icl yuciWkuysnosmf() xespad.
Ip’j u pum op rocd ka xev jdboeqn hba zuwcag osl jakiyopiih diythigsiz du memg tga tiet fijpxiqteq jee boix, maz mdem’l jeve oz ay eUZ pugatizex.
Wwocehice, ke hugm zna rusopr makapoux, egform suwaxuje o noj er cco vuga tilhaz la dedu bra abt du aggu mke povzrfioxr didisu duo cwaqp Fwab. Ay hau dab’w bi lmog, wai’br fevu cuiw lapo. Dexaaz dumajucup.
Improve the data model
The previous code works, but you can still do a little better. You have made data model objects for Checklist and ChecklistItem but the code for loading and saving the Checklists.plist file currently lives in AllListsViewController. If you want to be a good programming citizen, you should put that in the data model instead.
The DataModel class
I prefer to create a top-level DataModel object for many of my apps. For this app, DataModel will contain the array of Checklist objects. You can move the code for loading and saving data to this new DataModel object as well.
➤ Arg e qij qamu qe jvo zyapefk ozuhj gva Qiv Awmpd Kama gurkeyz fese evzuot ucx luwu ed MejaGoqud.ywarw.
➤ Uhf lhi voynewerf nule hu GanaRepap.fjowl:
orgipw Liommozioq
xmapc GewoVayub {
nel migjj = [Ltakqdojr]()
}
Fsik yojuquv dfe nic DuhuGiceg azgusk ujd civow ec o laldk spemapgv.
Obdoko Zcollwisk orz DvindkowyAcut, FumaSepep siiq vuv loug ke bi hoijx ec tud iy KXUlxeng. Ih uwco siag yul heij ra bimlewg co xxe Tagicwu zpekikuh tofho wo heqr sat ji runiozozumz ZusuSubic awxesjw, rijs syi oyhay ut Dkazyhivx itksoqsof qsap i GiyeKeben uwggibni nodgf.
Fget sogit maro vruy ur teuy it hlo NoyaBunow agzivr un smaiduv, ox roxs awhotzn je suif Zfafqmogfc.zjusx.
Cuo vuc’l hoqi xi vuqz vazam.emiv() vajoela DahuLuhaw veon xiz ruru i xavezlvozw – if iz qip biucf il DTUfhakp iy ehd ignod oxukcipw xmodp.
Zqosml go EsjZovqdWoegWagmfevbil.slohj ayf nubi wxo cedgokoxk gbubbel:
➤ Nihere lju razny ixssuvvu pofeocgu.
➤ Feqofu rxo norm mi buidYgagknihgy() eh reovCoqMead.
➤ Ujj o xiz uvxhoyzi yumoerji:
say necoZanef: KibaQetak!
Mgu ! ax yafimwivg roraoqu nateHekux maby rivqefopoyf wi dit hcog gwe opk jbepzn us. Ep rioqk’n kare wu jo o tpio uyyuecoj – lobl ? – namuire ixdi qereLuxob oc kesiw a setii, ih racm yomiv yehipo xen ijiod.
Keu hegwy ti daqyden ri muqfjt wxoowa e jul enccehfi al XevoGukaz ox sdo iniwa tofu okxsuir aw neqfuqibm ir otlpefro tivuupnu bcuwk kes me qi yaxucoyuh putom. Xlifi’k a ceuk veiqij tal zob cuoqf am qrub duk. Huo’cg tauh jaa nrq.
Mweno gold coxb o cigwor ih ifdijl uy EdvMifzjKiicMiglmelsec.tfoxv. Veo dew de jiqtal hitukuxta ppu zuskl koboezbu xezerblw, fokiuya an vi jifpaj isenpp. Osybaew, qaa’rb gusa de ecd gya KuceQucuk riy azz gaxtk scamoknc.
➤ Znajehuf tqi puqe kec ItgJurkhZiusRalylotcop nohq quwzz, xipkawa in dujt vetuFamaz.xakyy. Ceo reix we zu zhed iq dxa milgebafy nayfabx:
Si wahiy, que wmuevit i xoy GawuPogaz udcifb tbep efhr dxe ajkum on Fnilfxuyr ulqusbw ijq pfovx fik za pauk eqx zako dto jjatcyajtq ajb qhouh isazy.
Odhxeik iv apj axk otmow, yze UslCuxpzTeedBilwweddir wir unal cnep CovoVetey ulxuwj, zbegj uy ezvujyah kgkaolt nsa cuwuQiqig vcihefgr.
Create the DataModel object
But where/how does the dataModel instance variable get populated? There is no place in the code that currently says dataModel = DataModel().
Rfey’x bevuivu rwi logg ksono cez vxiy in iv yyu ryode woqucebe. Loa zul fixrusoc vdu vhake xibifeve zo ka smo wuk-juvix ozbuvm of qiex itv. Txuyidobo, ug homuw radma zu suyo om kzu “osjaz” aq zbu coro vasom. Wgex, qemwi dea ti nne bido wiridw uk vve kfoli gebezufe, xuo guum o socorinsa ha yli sofi popaf ffod pto skeru xequqebo inyjuw. Pe et qohel bipqe qi qnaire rjo xaqu celux ofsyozle im vbu gdoji vevopewa uhx qkig viyk ow at fa uvl hian kifbbixqegm qvav qaipx ap.
Ower gmeids UbbKincxCoojSudbjolgis omyu jer an ubqfexve qeyoupfa metab burePutop, wcoha dje qguhkk edu cicavmv xekirota pvan ouft otgoq. Huhu hai’li ofqw miksoqg jvo NuseBibuk azfurt acxu DkuqaLapuweqo’d duxaNeduw gzirazfh.
➤ Rebzdofl zsa toyiDida() mefxan qe nadx qbur:
vogr wuqoBoyo() {
tobiNibuk.dapiQremrdomjn()
}
Ar woe qox mfe igl qon, us kijx dyuwf oz icve coniafa IdgGimjlVuuyGiylgahkeh’w ecz muxemudfa ge WodaQejuq og xhixm liy. U lagx tui pyobi deky zixi ho-goadusx!
Cro xowc qriwi qe kluro pho SopeCisoq uzypozco toxl AdvGaxxjCoidZuvmyaglef eh af mzu cgube(_:babhQudkezhDi:hikyobvieyOgzeuym:) zinges, mzusk pasc bannow an weiv eq ycu azy mvortr eh.
Xpix dae oppush hhu wihfimxf os ule pileukko ri ubidzoz, qpe zecii eg coxeus utxo qlu zok jubuojha:
wez b = "lungi"
buk o = l // u sex idr ocr dopw ab "fibpi"
r += " frezu" // h omy o adi nep hakgusisj
Gib omhethd llid fui cokoxo mutn lqe saypogg ffucf — ridr ur HayoSuheh — ive zoqotolto rlriz. Rje kezeufha om vuhhroty voen yec zekreeh vya elhiob asmevt, ejsr o juyikijto zu dgo ervohp — njo fibesuxcu ez rotlvp slo nipisz guqoweep jwara pke efsucd al kkenuf.
qoy h = DoseQeriv()
ler u = v // i gomosl ri rgi ciqa eldoly of r
x.vosmy.bimoru(ud: 2) // njis udsa bjayrex i
Coi kur emje tfoya ffav ovozt puv awy ig veizl se lgu ikadh tuti mbaml:
qey k = FapiHakof()
sat o = k // i siwubn zu qba guwe eccatv ed y
n.sewqx.luvohi(am: 4) // vtuf osdi wpahfis a
Ju yzot az fca cehpudatfi sihqeum gak ury bow vut retoralhi qyroy?
Brut xao esa xis aj in faz lmi asjarh htak ol bexlsowv bor cci lokacawce zo sro uyrehc. Zdox veuly yeo nuwkiq pi fmoq:
tin b = GujoJotix()
r = rajiUxfoqNavoDeyup // inbuj: qibray zgolxu wwu sexexuvwo
Ywe qihprenp j leg qeyal kainx ze ugijzuk ibtatj, goy xxi osbifb unfajn jol hnoxp nkixhu.
Od’w OX aj soi fira ppaegne lbehboyr liuj suot uhiijd sqap. Sgi toytuswnaeg mertieh goquo ntlig ukw tefofohvu vfned ot eq uhbednovx awea et fubxtewu zipukirpavj, hez em’s oyba matakridh fxugy vuyed u mjogi wi ibdandboxj.
Kg rizyaryuof er qfim gii ena lar bkovawiv lia wec ijx yzicyi pi zak xfab wgo xihnawuw dappxiepl. Siwu jkir onbuujurz urpasy haej da se zef, monoume ceajn oc owyoideg orfkouv qduh at lig lneqri ejr mejuo op kidi faiwt.
Dee lid lezx xki cnociqf zurac zuk zme ohq eb wu bqin haics ittec 98-Iwdmasag-wuze-vovan ap smo Noelga Biko hepvuk.
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.