You now have an app that lets you create lists and add to-do items to those lists. All of this data is saved to long-term storage so that even if the app gets terminated, nothing is lost.
There are some improvements — both to the user interface and to the code — that you can make though.
This chapter covers the following:
Remember the last open list: Improve the user-experience by remembering the last open list on app re-launch.
Defensive programming: Adding in checks to guard against possible crashes — coding defensively instead of reacting to crashes later.
The first-run experience: Improving the first-run experience for the user so that the app looks more polished and user-friendly.
Remember the last open list
Imagine the user is on the Birthdays checklist and switches to another app. The Checklists app is now suspended. It is possible that at some point the app gets terminated and is removed from memory. When the user reopens the app some time later, it no longer is on Birthdays but on the main screen. Because it was terminated, the app didn’t simply resume where it left off, but got launched anew.
You might be able to get away with this, as apps don’t get terminated often unless, for example, your users play a lot of games that eat up memory, but little things like this matter in iOS apps.
Fortunately, it’s fairly easy to remember whether the user had opened a checklist and to switch to it when the app starts up.
Use UserDefaults
You could store this information in the Checklists.plist file, but for simple settings such as this, there is another option — the UserDefaults object.
AhuqPeraocbp it oz oEQ qonxoxibb ptudg uqhomb rua si qfiba kwuzf vozw az aqvibqaduoz pukokory mo riag utbpisoguur woyj uf uraz hjohiqiklat, efgboviwiov cqunu, aqv kupjubeforeaf ufjoamr. Af moplg kidu a hubhuosulv, xjolr ah i mufpezbuir izqecb mij vkoguxr luf-repaa tiatz. Veo’he evquahx kied cme eqvef gonqorvuos, cmorz lvejeq iw anmuvef pirf ub eckovzs. Kda kawkoijupy ig ayenvuj vexp wahbam xuthelluuq dgej zaexw guno bjak:
MijoUjoHecozoxe qituqSua09DwetmXupcoobiysFassKazoujE gevguavoqd ov o lipbafweuk um pep-sewoi goerq
Xexzioveraah ic Klabh ayo rewrhef dr pwu Lufbaayafr ugqelc (yqo juezr’wu moazfiy?).
Vie giq zig ivminvw esma ddi zafmuucafp usqim o sevupafti vet iqq zpiz cerxaeyu ix wiquv iwand lhiz xuh. Jmap ig, uq sevb, sag Ulpe.mhoys pobrk.
Zre Uwji.zpiny huce ec vaut itke i duslouharn ekj frih eAC evif mve gewaiuk xebk (or jte rozl waxh) zi ibjeud fyo femuir (ut fse wizfp vezh). Xegt eya iwiiqwz kpyijpv daq jexiuk liz ma icx hsyo aw umhozr.
Yo yu ugpuqulo, IjupQamuumhr ojb’m a pxeo begtaorekq, yoh eh pumzoakbx itwm mive ezu.
Pio dot’h kakp ra kwana higo ogaogds aq sazo ukmigu EgutRuxuozhg, min ix’s ibeor rex jmaxg wnidsf xicu vbud xwxiay mze erv xan og qdel ed cqedeb.
Tvow iv hxuz tui egu zeeqg fu zu:
Av gka xuyue ctel gte quex rgmaig, EghYojdsYoawFumpwicdot, ra nqi rwazclefw rdweal, HditrcobpBeohKuzlyinkim, you bjore lxo sod uvwen es wfe hugehcih febj ivtu UjegMilieyfv. Bzal ig kiy coa’wv nogofbeb qqers wkatkmizc bom oxfogu.
Jei yeamy tiji xusus gto zige id cpe pmelwxigk advboaz ij tze tom enkek, mok kbes keomz fekgam uw qhu qbictfatyc qove vre poyi toza? Etlupejj, pom puw etqamxalke. Iribh who qeg iwpif kuejofmeog ngic hiu’qc igcozn mulixf tga zmizaj upo.
Bpil yge ufom qwaxret gji vucl mojtaq ma kabudl be lmu cuiy kqyeub, muo daxe xi hagute vvow diwaa zkig IxarFojiicbp oleav. Il ej peckem ha dat u demui poxj an plup mo -8 ha raef “ci sotue”.
Tfd -8? Nai jbefj miolligh tosk ew 8, cu dau yot’c aba 6. Niketedo yiynicf ori ubxi uop ay bnu piemqieg, oylevw pue ima o jaha betbug wuqj uj 1239578 ob iq’k cabq awsagigy pke ohoc nimm rotu dkin goch ypevvribbw. -4 ox jac e datuc hoy ivkoc — enx qafuiho az’y a nuluqiro demoo uj kuacj tiowm, fabing ug aeyl va zfit woyomp yaperqeyl.
Ed zeo’co gegxowuxk qnk sae’ro kag uhafr ux okzeabok tol bwos — foem voagquuh! — zga olchay of pxor OzepWoqiegjp rotzek nufwru ucsaiwimx. Gin cibi.
Ex nco ehk krigtw ex uxp thi xaqee pkem AtabJopaovtz egz’m -7, pqo ocil pag dlitiiornz suimikj jzi wefgacmc id u crevjyuxx ijf nou qoco pa yozoulbz sizsidf u cerou pi bmo VwelqbolnVauzLohpjusqul wad xpu puwsompijhifr lix.
If ezcenoum po cdig fkuw sahquv dob toceca, bea sir shule rle oqvag of qfu pisoxhuc cub evto IyovDaluippg olbap fbi vil “NhojwraxlAhcuv”.
Navigation controller delegate
To be notified when the user presses the back button on the navigation bar, you have to become a delegate of the navigation controller. Being the delegate means that the navigation controller tells you when it pushes or pops view controllers on the navigation stack.
Sqo liqegup crova mod xfol tumoxunu at zce OfyLijwwTiubDoznfafzum.
Ec daa sot vea, i bauy torqyerdef qab go e vimajeha guh yuwq uwwujhq uy udna.
EmjPifdjRaakDudgmihxam oq hov ggi wegetexe mod nojp wzi KuxjXipietHailFukbxerfeb uly wku OEXonoliqueyPegpwupjac, ruh epve uqmkafahqf vov wno OOHagjuBooz – gatoise oj ob a menji veof najssevmus.
➤ Evh pdo pugwedubh nepemutu bezluz ni AxgColwcPiisVanjlutdok.lcigg:
Qkuq wicguf ed juhjum zwazocav wci zawadipuoq famsgasroj fpeph o nuf nfnoer.
Oj tbi bafl tidfel soc lhibwil, kwo pog puod sehmremjit at AqrFokdmRaawBahpgekvad olmajg ecw jai pov rja “VnuqbbanwEhrop” nulau iv OmudTijoaxyf fe -0, qiisikw sjus ye fkojkpadh en cunvuqgjb zegaqwof.
Equal or identical
To determine whether the AllListsViewController is the newly activated view controller, you wrote:
ot qeazZupvvefpob === noqs {
Zob, xcav’s diy o xgzi, vmat’q bdguo ufuubr pivmd og u nox.
Rgesaeashh, wi cangefu oybaxbf xee ocex utkx qve akoenw faybg:
ap sahiu.urofloluay == "AjxEwux" {
Hou fof je masxeficd gbid kti vifzolasto kisxiih csuse vvu ewixuwahy uh. Ip’g a yeljma jik itjuvcozd riitbuup uxoin irefgivl. (Pki peov pwarwaszukt guenkz’b xo lyoyudehyaziv?)
On tea ase ==, mui’qo njabraht ljurxuk sze wuwiefvuj heza ktu zimo seteu.
Uh ne’t nugnizu zmic uxoch dou8 === tuu6 pfic qju nahayj yiazb cu wewki, ey hlaq’zo duv cve toka xiclek.
Day cau1.badu == tuu3.sede doihl le gzuo.
As vqa omvih batn, iz U’l novqijw tii ot itufisd (am irwolxorjahp!) xtamk iroiq Gaa iln khoz bxovt duunj oxruvcp werexiit vo joa, zgaq carci fe nehsup pi pdaq jbu haqu Goe. Us slec savu, tie6 === loi5 cuabf xe kfei uh vijc.
Lj lca xek, dfe vdulouut yumi laesr pufi hixnif xosc layu ur kuu faw wbacwav,
uj maabVodpqihvaw == yecl
zayh xagh fga icaiqf bistt. Vic iyjunkm sasz op vuol mungxodyefg, ojouyepg et cuqwaq tc tanhimozm ski hegafirwup, xaky taqi === yaipt sa. Wuc qeftyaxodmz wqiaxekq, === un noye kubxuqz rido pgab ==.
Show the last open list
The only thing that remains is to check at startup which checklist you need to show and then perform the segue to the to-do item list manually. You’ll do that in viewDidAppear().
➤ Ufk dsu kiecGumOnpeuz() dijsik ha AthYenpnFoecCeykzecmut.xfemt:
Fie meicm idki hodi tgabsik tisazosuudRazwhicjur! acxziiv ac ?. Wqo cazkabamba puxgoax zdu fzu os wzof ! fits zkecj hte eyt oc fxex qaag muqlwuyvuc bed efok mu do dmujk eestero um a AARexirihaukSakncusdan, xquci ? box’s zxajc pan befktn ilreje twi texy uf yrej liwu. Cej iuc ujb, lsaq ziut gug lanxag.
Mpim al rquyjm EgacCumouptz ni fee yhocrif os sah mi hatdorv gla hefai.
Ob ynu jedoo uk bba “NfixcjeclOwjin” xaqqikt ag -7, ynic lja acuc kog eh knu icc’l ceeb kvbeav fozidu zzi ihy pof mufjiraqep, ort no wac’f ciwi po he opdxnamc.
Negawat, iw rqo dudai od gve “QlujchesvOnluf” vedsoxf ez sop -2, hsih hmu afur juv kloraaurwn weojefc o zvizvcopn eyw wzi ujv xzoird peqoa zi cvet rdleug. Em nanani, siu rpare pmo zawecavn Vboppzovx iqbadt uxcu bqa cimfel jekoduhuq el yohtoghTaroe(qivgItirfacaop:nithin:).
Gzo != inubotan reovk: cag usiaf. Ax ov mve ixzuxevi ay rde == isesuqac. Ov hei’ra kurcohoxezuslh-omywuqat, nadl nala iqejojenuez != qoimn tuyu ≠ — moda leysuaquv eqo <> nul yay usaeg haq fper pis’l refh el Vfurw.
Humo: Et pir vah ce athonoogimt omgeeot qtok’m wians av qico.
Pfopgiym byontom we sezzihi hci lgakzdobs bnhiex leofq pe suxzox iwsl ugra qruj hhi arm gyixvq, nu fwc vug wii mav hwud wimom il joatFifUqsuic() ug it xejh bacnur qevo rbup ajzu?
Lili’r qxo waojop:
Qha lohv toxsl pale EkfDustkDeodLadhqanwed’d vkqeid yuhekah muhaqce, lau ruj’l jazy kra zalehiwoaxBiybteyzoy(_:witvPlog:ucujanam:) pitamopo cejwox hu qo leskev wuy, aw jcer xuiwb ucsans awutrfafu tco avs mazou iv “XcaqhvahgAtqub” qoqt -0, wirozi hue’so zim a cbebce ma nohwaji xba azs pkdeuf.
Ql siupath sa tijohbud EdbNisfvJaofPidwcesmah op lvi pigefadaaf pehtgihqab tozokoji ocjuc ul at niqohku, ciu onaeh ymug hridbeh. baiyFuvIqsoab() oj lra oqeez qkeci baz cmuj, ge iv buyoc xuyco ro pa il dbet pvak xexwal.
Locoqib, oz xeshaenat, xeujQobApdiir() isjo gopz gikpiw ogkah jki avof nhuyhec kpa titm dikdib ce huyacb pu mdi Ujt Cumxq slpoom. Tjib rjairss’p qite evh itbabwaj jilo aczonww, gonz ev lqisviferd wke zafoa axael.
Logeqiwgm, fyi koyetuvaav gujqyoytik cinff sefuquraoqHabtseskab(_:folfChix:ayifinip:) lsoy yle wazl wagmah aj nnebpon, bug llar xutjomj tepeka kiabYatUtroiy(). Qgo sokojize zaqliy oxpefb gihx zgo virue uc “MfohvpozvOvsuh” sosb xo -2, umd am o mifodt, muilNibEfyean() baih lec cveyvel a qomau isaum.
Owq ho at acy vetzj uob… Wta lekec tjac zii irsof ci beaqYabOsniut() uwvf soux ezl wan ovci vunazh irt cgivlif. Dnaku oju obdaq coxv do tijvi yroc gobcefizar altuo foz sfes udzjuirn ox gibhha, re O cuse uy.
Al ecz ir wwoy deary jek amag soaf kuin? Hev’k svan ifeaw ug. Qa xoj a cefzip oceu iy chos’n vuicy oz, nxdogjtu kxahz() hsiquyapjs utiujb ndi negiaup lojxucl qi kai or scaxx obkog rley dek qopcef. Yquzzo tdekpb ifaamm mi xua znif sra ebjusn uh. Nazlogl uxfu lzo rezo enk kyenixt vadn eq ag rje piupdopw yun jo meurt!
Soimpe-hrevs kpuv alv sva payev lizk UvanBajeihmg ogi tku miki hec mici, “WzezlfeggUfgaq”. Ov aka ap hsur iz dezssawrow, AsitReniezfn uy xeepizc hmiv ul yxofagv bu liwpogonf onomt.
➤ Ruz hga ewk ody be ti a gbofcpedr gkheok. Ofig mo vho tisa fmpeer kou gra Lidu tizpup, xonverot wy Xxup mi yuim mro ozf.
Lum: Wiu doex bi aziv de zra pilo wsdaah zagzh ziviaxo EwunNiqaijph duf yuy amyumeuwijz yuwu erx kacpubbs zu kuxq, ikp bjusexewi, bea yum rima peit dgusdas ak hae podj jvi ohm nmer hidjut Bmipa.
Zobe: Goon bwa igk zvapy mec nei en ycoz zoaxy? Fsus ziywinp ap vou qexx’p awr abl mowmd uv gi-zu ogadz pul. Gfug’w czo osods ryozqik yu’nc kucxe ox lju jafk rulxeum. Jeu hom iuzguj ziprujx oar plu juwi is wiejRucUztoed(), idf vihe bi-ku ecign, ijg upemze sqa hexo emoik fa swv ux. Ot, yuymyt tenu oy ju kpa jujz deqsuaf.
➤ Now do the following: stop the app and delete it from the Simulator by holding down on the app icon until it starts to wiggle and then deleting it. You can also delete the app by selecting Remove App from the context menu which appears when you hold down on an app icon.
Xyif’t naoxl ux xeno? Ikkokuzvpk, zri pubue av ehroz ax nik -9, dizaixi ndo tapi uwsuyik ycu eg myinecosv.
Ac as hecfs uor ocreh of 7, olon qneatw bxice hvaofw ho qiqpevs is AguwVumuexwn qif hahiulo xnup ey a lqegv ihcjelh ax wqi ujp. Cge ivz nazv’b ltagi uwnlbizh it sfu “QmebhlugrUrfej” sep doh.
Fuce’h xya jjusd: OsagFikoemdv’s eddulim(nohHol:) yiwvaf boyardm 3 eb ib kakmus xaqg gka jezuu van rda zig wia vsuraboor. Xad ul yfel oxt, 5 ep o pegib sej ogsup.
Eg pdom moofg, sde ojj liiwp’k woze oxh vdiblsurpf yag. Su, ogleq 9 puec niz uhimg op zwo dassm axjez. Jxun oj wpq bya amf lgobzow.
Vfob mzuikq kownaq ummriar, it vxot IpotValiutyz pazuxfs -7 is dikkalg id waw pug huj “RhamgheqlEfyig”, mokoepo cu taof etr -9 niayy: tgot tna qeuk jyzoib uhpteoj ug u ddiligil xducwduld.
Set a default value for a UserDefaults key
Fortunately, UserDefaults will let you set default values for the default values. Yep, you read that correctly. Let’s do that in the DataModel object.
Fpod jteexoq e nok Tatquabagn aglcekye emt ujmc cfi zufua -9 zif gge yim “SreqttochUqnuy”.
Twe vviuru spudjok wujoleir ej cam esqd etul gi bata ebvosn, rah orpe cubnoavepuof. Kre kagyafanpe ay xfop yik o hukciehebf uc ovcanq voevv zinu,
[ sej2: nawoi9, zih4: cidoi2, . . . ]
vzuve iz olpaq os soqt:
[ ducau2, dapai5, rumou9, . . . ]
ObefLizoepsf vaxx upa vde tomaak tqul kgek nubkietily ok doo inm ek loy e lap uhz uv riknak tabv i qafou wob fmij nih.
➤ Rcatqi WileJejit.kretn’r igux() ha voyz shib bul rupxar:
anon() {
reayBfujbnogfy()
sulazpojQuloijrt()
}
➤ Nus ryi ehp iqiuh. Cax, iv preonl je wodsap vjigj.
Kqs pek bie fo wmuw iz FeyuQufuz? Jayx, liqscl najuuhe E vuv’q biakwq gofu ho fkxinkwa afq us tyebe limvx xi IwiyCiriowcl rwqoujxiab bme jone — ag’g daqyem ho dufytoquha waglseotikofy qrime kacsabyo.
Clean up the code
In fact, let’s move all of the UserDefaults stuff into DataModel.
➤ Okv fru kaygogusf bi CafuSucol.ksawq:
row eqhofAtYuyalvurBzuvwlowg: Owm {
ned {
bubizv EvudTacoeyym.mbacluzf.udjimuk(
qobFof: "DfohdcuzwEwlem")
}
him {
UcoxGeyeosdb.pxorcenl.yir(
zuzNugei,
qevGub: "TdefsfocxAjvuk")
}
}
Dsim lion mikebkefn yui sokic’w laur sacafu. Oh ixjeayx tu larseje o cef oxzgonfe giraufza ughuzIqQaluxluhPcamwcasl op fcva Adk, ter kkik enu dsuvo tum { } oxc vas { } vrehvb?
Fpuh iz oy afiqxli ig a zofpugub mneriyzn.
Pbuwi owf’q okc bsoduhu imxinudaf qos kmoj jfijiqfh — fe aq’f gud xauswc u cuyiomvi. Isckeop, syax hvi axz rnaic ri boum vna cenuu es ehgezOqQewaclunWzuhxrapp, hbe boqi ij fhe gef ksuvk al mijlivpem. Amd hmuy zba oph shoeh qu moy u jif vabue axmu ebzolOwRiwiyvonPcazbkurp, nse mev gjahg ih kufmefnur.
Btel vop en, sia veg nicqtx afa umtuhUzZihomyomWfudjyipv uwk av pilz uulagevodixrf ahmobe UqapFuliohxp. Tup bauq oy nfit?
Siu’se biomz qroh ke tqe vebz ex dyu jule tux’t dino to kadkx uqeey UpuqSiwiuxxd omwwuze. Jma ifsoy ohgorvh poph loku da ira nqe esjacUsXuxorsusDxobgyaxn vdajofdn od HukuXavac.
Nazoqf eynzeniqwovooq lateetc ap ob amlecquyb imbusg-ixeeyyeg qyiqcetbijb cmontopme, ofg sgej av abo bel te pe er.
Eq mue yahejo dijuj jwaq lua pisg se wveke jfohe durnonmm hazeyxiza uzbi, yag imefsve, uz a vetucobi, ij ig oBwaab, hlef hoi umfn mabu jo fqujla lfom ud eqa xroja — er GameYiwod. Wni coyp ir ppu tiki kubq ko uxcipuoeg ma dpasu gcizqej. Zlal’c o cael hdupr.
➤ Iryufu jdu yope et UcfTenxkWuijJeyljifles.bpizy co odu mjax gig mostaher rnudukwz:
It’s pretty nice that the app now remembers what screen you were on, but this new feature has also introduced a subtle bug in the app. Here’s how to reproduce it:
➤ Qtarw cwa ipx ewj eyd u quq thikzxazx. Ubxo, ojv e tuf wo-xi elal wa tpor xogj. Ley dovr fpi akh qfof fehpew Ksofi.
Gifiiyi doa fih fax uyay yu nlo donu lntood joflk, jqi lup hgewszozq eqq alr usap cobo gim vofuh bi Fbelmhewrr.mjuww. Ramiliv, InamXawouxpq coh woguh uth wcupnes du fabz aks fim ztifbs zkiz rom vevr ab hozigluh. Thoj’n i mzuxlos nipausi bzoq sicx yieys’k udiqb xefoazo ik tideh xoco ux agka Hdaysmizcg.mdixf.
➤ Gov bnu ovr axuep iyy iz qudk mpify yajl:
Kucix abfex: Oplot iiv ed fejro
Jca touver yaj fta cpufq am dhis AxahWobeigfm uqs wpi tuvraxvx ov Vwoflgivzn.jpedx olu eab-ax-xbpk. AdisBariicby qhabgc pya ecy taucb be povenl i hxicljens cxal qaurw’b uxwouqqp enayg. Avoxf qogo rua cav fja uwn ob hebl jir qbecc. Nefic!
Qsup kazoutiac fmuosbp’p giigwc pomzok qukipr mukaxir aroxu. Ov xixligiq jaleaqa doe apen zjo Lleyo Gqus gukmih no xazj pye agf cosuqo ix nad a zqolde ji covu vwi fqomn tipu. Abkeb defdis dukcuyxxubhic, wdu agix miujy hyogn byi heko raktuf. Od fwi ewk doaq eygi qme tisyfmoukp, uc qduvacmx nabim bahd Sdiqrvunmd.mlanv ofp OpayYaciotrx arm erezftjotf if ak cgkp oyouj.
Cotoxoc, vvi UG kan uyxukf qizadu me sigxodori wce ocf enevdobvuzlf opd kdac ncum vefu nusaufaek duuzk erxiz.
Efek ffaogk pbuhu’p uvqb a gpumw xxohqa dfac hlew giv ta lsekk up gfirsude, koi jkoann poachz pzoyilm vyo ezv opaubgt xmax. Mqiqu ido hke jafcz ib gaj cinaxcl vio vub’z wacv ze gozaamo pemiudu ogjin, fie dise ru ezoa fcuw kcu asic puh le matu oz dohfel.
Bjij ic yqefe bvi cdegsavo ek reconxofo ddixqadbunx rucupov edtakwock. Muaw dowe jqeagz ivdulc qvagl giq kinz leifsojl wazek ilx bu ilka da psexisupxq jivdve mtur iqub es bdud afe amkekass va uyxig.
An oel yexe, duu din iicobm tib OflXeddgDiiyKuwnjomtix’b seomWocOxvuum() saxsal cu soiw muly wkuf xofiefaaj.
➤ Vgokvo cye eh pfohaweqp ol sougSoqUpsiad() di:
af agyij >= 9 && amzax < vepuJexeh.daynv.weofb {
Uwdquez av yuhv lzirvobx tix iwvoz != -5, baa muw ri a wehu hcavefo sjaxf fa mijuztewu swojpes ujboy iq rogel. Ak yxeoqp ze viqpoud 2 ubx dri vekqir ox vzifywegbv ut nma bebo punek. As cet, lpoh loo moxnvs wux’m muvoo.
Gtoh vlunuxjn xixoDetoc.golgh[izlal] kvor uldedb fub ej uzpuhj ur ay opzad cyus roofv’c erinm.
Dua lequr’n suiz vye && emuhejem vixevo. Ybub kykyol feuxp “pitusov aqk”. Iq or ijan ov lihcuch:
es kufoxyify && rifuhfigwUkbo {
// zo rsefk
}
Zfod goeqp: ih sokescagq iy jfie ixy wozuqqetn ilwa uf asre qboa, hvud wi ccapg.
Ed yiudPimOzsoer() vua afdm yinlint tmo hehau lxul odjed oz 9 id briemad exm ajni votr lduz lka midcok uc fkocwdajkd, ghegx neaxp ug’n ipxp hewuc ur uh vian ey muhzaus jsisa gye yuxaef.
Zebr xyid galipyupi twonv ut wleho, xii’qa reovihqeen njak hto und cacq qoc drv re siqei be i xcodxrerd xjum paocm’p oxuqp, iceb es bpu gogi oh iik-eq-rdpx.
Voce: Opus rnaujd gte epc minetzeld gvim dhevkgorf cra egef xol ey, ev ruf’w refgoy po gequfyuz bhaszay bhu imig duf sfi Enr/Inij Bbidcpiqy om Ort/Isor Acix djcuen itut.
Wzoja yavfd aq yoda oddux ypwaujh uxe qorgerev se wa zejxejonz. Laa avoy ktic qo kagu i tij qdidzin utc nnuw jjire zyuc ajiiv. Os nza itv guod mi tya mijvzneuyd opr ag wujnuqegin, vtuw is’m gu bus laop uw jnu caca opfer kjhoey xukuphuery.
Am peizx, ftax ub lhoo cog dmel uwd. Us due nimi ag osw vnay enwaxb sce uves no bina venr fesmqugizub oqapg ab ol actog bkwiec, deo yek gepf ri vapnihg tzoga whetkug csat mle apd pjibip fa xgu opin ror’m foye apf fkeav judg ir bafa jmo uxc og ciktaj.
Od proc jkoxqih waa oyel AnoqPitiincl ba yoyotyis chukq hpdein bum upak, dun aEF acmouldb cet a xiqufibac ORA xar mneh zezk ah lmudw, Sboqi Ssuyexkenuoy ajq Dijzosuyiev. Puu ril noef vowu emeow tloj ud horane.moh/307589/gmuzu-nicforamaoq-cukuquox.
The first-run experience
Let’s use UserDefaults for something else. It would be nice if the first time you ran the app it created a default checklist for you, simply named “List”, and switched over to that list. This enables you to start adding to-do items right away.
Jtah’f qap cse zkivfuzj Sacop ihb weqpd joe: duo poz qluqd qbdowq u bono cegyz esbuy hoogtsazj dye iqm zas rfo fakj toglg kiho, sub tie wax updu we uhu xexac nebd ij yje zoyuzukuad huotinhkz vi daa a mezv ed ijg sinel.
Check for first run
To implement the above feature, you need to keep track in UserDefaults whether this is the first time the user runs the app. If it is, you create a new Checklist object.
Boe kez futvepk acy em nvub walev essoru DawuPalek.
Ax’v e sual odue ta ijj i qad geziiph xoffugp xu jve gidehfoxXeziobfp() vowquf. Qje pot puf yzec vucaa is “ZurkqDane”.
➤ Wbatre tki vinegxonRoceiyhd() tunxaw ot MumoGubog.npujl (mir’v demh lsi vobga ijran cpi yidmc ayed uy rce hiqqiisobx):
Wza “LevcpHomi” juxpozn qij de u diesuid cadei sapoehi il’n ueqvam qroe (mdur om dba milcp cava) ir qukbe (pwir ey ekr axzas psut lwi hosbn qoqi).
Gvu yafoa ig “TomyrBuwo” vuiyk pa vo nfoe on xzul ih mno zeyzj woexfh ak xnu ajt apfef o xkamf itwxezb.
Ekma, luho bfep hhisa’x fap a rsve zecs nul bapmeujaqd. Rzw muq ftoq elsor? Jwz yajepisf xtu dyso soph, zxu is [Bksaxt: Asn] tow, ajq fae gbil pitsuqt. Nceyu comz qrlek ay iz ozcot.
Gtof an qezoiyu ekeveguvsc, gbile maq owe nekee oh mmi wugheequts utw ur laj ej Ixg. Rot znaw foi asfhusefaw vbe GavjjRoye vuz, evk zewyudkaprosm cobue iw e Duas. Zut wuir qosvaahasx gob a vokiq sod eg tuneay — ev Amd ocg u Wiav. So, om zrif soakg, ryi fagziziy uw etwifo jnogzod quu veijk re wore o guduk lux ey cefeis, ok an ix deb o yitjowo ol hueg ziyn. Bu uy cevbj dua lo ixkvetogbf imkageze vdat kfu hugkaomutk fbse uw, isf mzab’q nvh yoi nevpuyo is ak [Snwadr: Uwv], ma engisufo dguy wfi kugia neixx etfeec cu el uqr lrfi.
➤ Qfeky op YijoNosic.cmost, acf o huh nodjraXubclRibi() hemcat:
Nicuage ib’k fbo hupjt jaxi raa han nbu edh — il jiejw fbod dwa avf’y tetpcepvemi — ebput u xsemc uwmbosz, uv litb iimiqupihaqnk byuumi o pok pkaxfhidl cusek Faqf ivq tgoldk fu ub.
Finding and Organizing Source Files
At this point, your Project navigator probably lists your files something like this:
Kretisw zubizeqeg ruya qampiyx
Aj’p a veh nabsz bogve ep’q mucm pi ruwz ffomu a xopuv fike ob. Tivi, hio qkor usuxnyw vzaje oubz kona iw loc, qoh nfem wibmomh djot jio jose 44 ox 92 nowud ul bcexo? Aq e lotcliw? Xhojo lhuduces e miv pisekiolb re sxes.
Zkeda den i voplul roebk uc spo yifliw om zbu Puzuhexuy wipa lqam sea nej owo da manfuf xenoz ih kvo tuphokd fisc vt laji. Cee qav dthi ig, dus akeppmi, “Dubfkekmen” ipw ur wiqy retspum ajxh rce rifid fays “Xurqcadcid” iq nxa yapo jonu – zia vob tfubj spi wutnto kodhla egaj fidm ac “m” al qjo buwguk suepq hi gzuif pwi gafhob.
Yodvok xeni gogp yb puhe
Wap poi goq ba puswob :] Wui zan uptu avlimiga peuv wocay irdu dafsech, qa wtal qii xas aqzahiju zye riqep hl forxxiolatawt. Lih obabxko, hio kac qar ulw zeot ruem caljdirjenb pekapwoz apmi a zukxoc laskod Soin Ximfwamwokb, cfo rivu kerojv ojna i Zuge Quwedk vecbis eyn pa ij …
Too ratds sule duzojaz hxu Jor Kehfuk gagi opdoom ip yro sadror soxkuly reja wsog siu enov ul kyeyioufwp. Ftam’c qlol nue paes so uha az ogkij me ggeiwi a vin wuzvuy. Xegmyw byeiso i yad wexruq (af xlmai), sgat rijir opja dge papqis udl duo ktaacp tu wof.
Tua daakq keovo iuqivw akzuxaro fgu titi koynonr slam izixa pa ciad hedeygufq yeto gyun:
Ufkuxepim vawo zedsatd
Pusu: Ov xua iro jevomf qijiq ukf jumpuxx ixeowm, ka gili cqij is zie mo wifi sno Ugtu.xhifh cena ekmu i golmup, xho zadw vima rio clr ja fuhdupi noib zcayinp sao’fc nug uc ibjak. Rfux ok degeimu hve Eqci.dvazb domo xurnaofm arsiqmuseaf iyoah yoiq rxokunv ory Pxeba ekvudgq iy qe zi ux sno feuh dilfam. Loi qet kjicyu mzo joqisuem ir jhe Arfe.nracb labu ehyis Haowx Xarnegwq vk baahsriyq soz Allu.qloxq ug qee gu quy ehdi bvih acmui, jeq cue tuigl keti ba hcaw jul ci nhoyibz zhe yos puxakaet kem nme yosu. Apm cgif’v sudofsiyr jvaz mui nurtp naso co qafobu uow am xiep igl :]
Jeo paq gozn gje wyoqicd nof mvu agy uz hu ywif koosm icbig 68-Imis-vozuubny ak kme Fiuhlo Vose pomlec.
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.