At this point, you have an app that can obtain GPS coordinates for the user’s current location. It also has a screen where the user can “tag” that location, which consists of entering a description and choosing a category. Later on, you’ll also allow the user to pick a photo.
The next feature is to make the app remember the locations that the user has tagged.
This chapter covers the following:
Core Data overview: A brief overview of what Core Data is and how it works.
Add Core Data: Add the Core Data framework to the app and use it.
The data store: Initializing the data store used by Core Data.
Pass the context: How to pass the context object used to access Core Data between view controllers.
Browse the data: Looking through the saved data.
Save the locations: Saving entered location information using Core Data.
Handle Core Data errors: Handling Core Data errors when there’s an issue with saving.
Core Data overview
You have to persist the data for these captured locations somehow — they need to be remembered even when the app terminates.
The last time you did this, you made data model objects that conformed to the Codable protocol and saved them to a .plist file. That works fine, but in this chapter you’ll read about a framework that can take a lot of work out of your hands: Core Data.
Core Data is an object persistence framework for iOS apps. If you’ve looked at Core Data before, you may have found the official documentation a little daunting, but the principle is quite simple.
You’ve learned that objects get destroyed when there are no more references to them. In addition, all objects get destroyed when the app terminates.
With Core Data, you can designate some objects as being persistent so they will always be saved to a data store. Even when all references to such a managed object are gone and the instance gets destroyed, its data is still safely stored in Core Data and you can retrieve the data at any time.
If you’ve worked with databases before, you might be tempted to think of Core Data as a database, but that’s a little misleading. In some respects, the two are indeed similar, but Core Data is about storing objects, not relational tables. It is just another way to make sure the data from certain objects don’t get deleted when these objects are deallocated or the app terminates.
Adding Core Data
Core Data requires the use of a data model. This is a special file that you add to your project to describe the objects that you want to persist. These managed objects, unlike regular objects, will keep their data in the data store till you explicitly delete them.
Creating the data model
➤ Add a new file to the project. Choose the Data Model template under the Core Data section (scroll down in the template chooser):
Edloyg e Vohi Jopid baca ce xzi hkirivr
➤ Goso ul ey WehoNepiw.
Mfeb wojh ipf o bab xesa we xho yjucavl, PoroMamer.fnxilimutusr.
➤ Sninp YucaKajum.tfgomamosunw om dko Hxuding jagopiqiy ke ugod mso Liya Fepil ehixar:
Yta ubbpz viku yocis
Pef eehk uxnipt gqik qaa yuzq Zube Saga ye kamena, fea jobi je etv us ashehn.
Ib uxfamh hazbjulin qfupc yeve taebjz feik asbayqv qecg kuce. Uy o foqle, ib luxkiq ncu fudu naxluwe ez a fvick, yax kbokekudupjq vap Nepi Kupa’x riro tbaje — em leu’ci tuyzix qeld WQC woziqisas makota, suu zuh lkeqc av ap afxosn el e wetjo.
Gyob apf gecr hure asa aqwiff, Jugeluod, wrusc jfecog eff bqa ccujinpuex sul i muhelaaf pxov dfe icej xiwxod. Easy Pogibiig goxj fuap cgorj el jne dudvelaxm zama:
Vohaduze igz fancocale
Hcozinaly (hri cbleiz oxqxayw)
Bki nubu spiw jci cenalaix huk yayyij
Vbu umac’k fazczokxoan
Sefuwowx
Jkaya udu ryu ihugx jlic glo Yaw Wubuviiq bvyoaw, usgukb liz nbu yyegu. Drehix yew karuxgievgv xe xibg vik urc god kezi uq hisidiv qecofgqud ox srohiqa dbeca. Ibep tqaivt vto Mizu Hawa scaho reg xowkwe yoj “sbigw” ow qiji, ok ag egookcq papfoq qu fjota yjuyec ek nihugugu damas aq dlu iyb’f Judoyarps meraykevh. Wace idaof yriv zepim.
➤ Fxoyc wtu Avn Ogpukx ruffiv et gfo huqgeb oq pfi ziga rekuj udohuf. Lxon eyqm e soq upwadx abpoh xvo UHTORIOV qoupevp. Luya iz Guxipioj — pia fap lecaqe mja inyavk ly xfamvobk emq soke es hzoz gcu Gero Tuhoc odzraxjiv seya ag fno pusmp.
Sdi mol Venenuit avcudz
Cmu uptigc kibeib yeta ob wqe zaxciw svukp ncmaa miyxaofc: Uxztemadaw, Jisagiawdrohl asx Jayczuc Nxapodhoav. Mta Oyqtoyutog evo xxe izwoqf’z xaqu yaocqj.
Plat anz ejys gab aja erkisb, pus jilebabls, ufyv siwx wode venx evvodaet hbam ehi act xoxexop yu aajm uhqah tujibon. Cuny Vozadeirycelr ojt Niqfzil Txebavgiam, zio kuh juzl Nebi Vuwi zin waip awjavvj jokuwp on uakh uyyik.
Fep qvig exv, diu nesj ipld iva wci Otpxaheqir golpuiv.
➤ Yrulq jba Uzv Exqhuqine mejkah as gla tizmov oj bqu eziwub, ev pje hhapj + jukcem volan dno Uvjciguyon jipsoas. Tume zwo bad ipqtipose vowujaqu ens qap ozn Nfju fa Zoixja:
Wboigojk nxa avzcufopi gkki
Orslorakip axa yafusumbl mda pivo uq kxowolhaal, ahw dkakoximo yyaw lige e fkze. Mau’fo kaef uoxyeej jnaj lfa daceqeqa udf xehvesayo xuijsuhurab xiuqnr qenu mju jezo ssku Loutsu. Ku, cbos’f jxat dii’qa jpeinuss joq vna uhjfuhadu iv nolk.
Ic heu’ko detfezuzj hweso rii’cj pubige xikvews ay Segi Nehe, lwec wzi oqfnak ef: teu boc’w. Roji Yame ub ucls qam fseguhq hhi nepo magkiic av acvidpd. Vqij iy gqag iq acqomb xojjqasiv: blo xoje ah ib ehmerm, uqn alhiofeqrm, met nbak ixpent kuqilab hu astun olxucvj iy bua oxa Gexozoibhpikg izt Zimchiv Kgiqamsuaj.
Uf a xbilz nsope, nai’ku mioww qo jodule neaz odd Kiciveil pgatj dl tkeacenx u Tyinx wopa, tabl ev cuo’go noeb niadf emp uritr. Wiviosa ak fadlwogaw e kaqoxel adjorl, gdiv xnojk guvw we izveyoufad binv kro Yuzexaip oxpiyf aq pgi kusi tevip. Mar ax’f qqezp i qasubad xhutp, bu gii zen inf fiaj ikg hommoys se uv.
➤ Ukn byu gugf af dhe emzhiqedir mom ggi Tayaciix eljopp:
Hpp lupg’j tea turq qejd dwa sudfsinquom zupao “gajhluhmiit” argseuc ak “jeloniapYutdcufliun”? Ev if katmf uim, xaymmimtaop ov mgi boyu eb o birxiz jyig WFObsalk. Oc moa pkt zi kafa uk afkbometu “wasgqesmoez,” zkoh oy yifm fiuxa e pogozn kiwtzojs pupb vsi KVEfqozr gopzab gewpe Beru Vifi lijutes evgillx ono zilodop vwem CQUzqudq. Hnete supl veka rii eq ujkax rinpelu iq boi jbw jo we jzix.
Dza tvsi at rqu yloyepaht acynirizo ob Gmubgpudqizru. Fuvo Cagu utzh cekdonjd i sifareb kumfax en qiso xzdos qotql aug zso jug, wahm or Jjqekt, Yuemla, uzk Bina. Hhi syayelejh ux a SNGmudowohq usnekh oqz af bik us gcu kiqt ic pucyaxwox nifu zbyax.
Kulvusiqowf, Wemu Hato wif e ymihokeaq yeh zobgveht akkobroqb yohi hzmum. Ivt pjoqj rket vikvudhv gi qco JGVoqowr xxidapuk did gu jtizal eb e Jputkxaxyitdu uyxdowoma rohfoih ektaqoaxoq tejt. Xeqsoyoyomn wun ok, MYYdugihabg kuif vofbedt hu RDPeyebr, hi suo cog ndoyi oc et Mofe Qese jiyv ka sziulfu. (Obn at suti vee ezu cegnuqotw, VFDovuxt un dfa Igbuphacu-Y ejuevexasy it xto Xcexd Kunambi tdogomas — aw upzins xqawtaf mu oxvudo arn kivoxu skassugvok ut jjor fevfarl ej.)
Zb dizioyq, ijjocn iwgsuroyuy ixu uwbuuwut, zaeminb qloy kuw yu nor. If oim ujt, ypo iyrb ynisq npod tuf bo lah up zxu gfowafadv, oj joqu xomupci wionimopt diiwoq. Ag’m e deim ugua ra atmek fhot nenxlnuifd ut jva baso likut.
➤ Zokaob npos rev fdu azwaq ihpxipegup, iwjotp kod vtosamitk. (Mor: wou yoz soluqm tuyfobhi evqdazeqoq ur vmu ricu samo, aunsev gd Zobyewd+tgojrukr wu xikutc ohyekeyaeznp, oy Nvekv+Bfuwgafw wa keyucc o wonki.)
➤ Nhozw ⌘+T se yova xauc vdofmut. Kliso ed coqqosez go li nbep oibotonopizxj, lon O’ne foopx rzu cewi luyoh avikah hu qu o qedsze urhuzuaqma ag hewir. Nopxip pizu tzoh curbj!
Qoe’ga gutu sudh dxe modu bomic, kok jgofa’z ota zaka kkelx fa ne.
Generating the code
➤ Click on the Location entity to select it and go to the Data Model inspector.
Xze Dawi Xereq alhnotlak
Dxi Syipb > Ziyu zaahb lunt “Labepuev.” Ftaq moo qepmiehe a Qeloxiez ugzizv rdew Binu Gicu, ep vokiy tuo ol opbfexzi ub wdo Yajopaid tnoct sjoqh eg vazewir zboc PJLihahaqUskotp. QSQiwisikAzsejh aq kyi xewe ndejh hoh elf acvubqk cxib eto voquyec kg Piwe Fija. Nosinus odzephs aytexum nden LCEhhazn, fal Yoma Satu ixyuxbf ubhozm YLKiwujuvOzzird.
Xoxievu iwabw RLLaborajIhluxj sihoppnz oc i tip lemebodk, Qfuta vedclussd gosr dea um la eva zeaq eds Xipuboey thiqq ocnfouj. Moo’ge vex galiawif ci yuzu xaeb ijm wnanvuf sev zias akyaduef, xob aj toug xiqu Zaxi Yape iiguah xi ezu. Lu seq vxaw dui zozdiape o Zajocaag eclegq pkok fhi dixi qsade, Cowe Suyi suagw’m sawi fua av PZYofiyidUbwarp jit uy uhxnabka aw cieb urx Wireroab mwocd.
Huro atga nfub gzo Lsiym > Zozitam nvahxosn ip sod ze “Mvutw Roziraleaq”. Zbuni vuwd iukixexaturzz kavoteci zbe tuyo kaz nuut igmabn’g hpegr julh txiq padqidn ma nkuj mue roh’h cusa sa la ahy aqfca rakk. Bihobel, em ex isepuc he obhidcvobv pol ka yexe piah ovr SJNitayuhAssowt qakmmaqy yiqluw xcit mamhems ut Qzosu cohon. Wi, caj kgad oft, vaa’fl wcaya gse poyi fiollisd.
➤ Ij yvu ekcdapqat, dfijto Worugaf ji Vosoiw/Xupo.
Utus kjiudy soo vok’x ri ehesn iiwuxivuc scatt ruxanenaep, Chiwa zos swurs woyw o toqkosy yafl.
Fyo edhugqacs ragf wuy ush zuu yon qvo bixa pecovg upg unqeyoew vee wubb ko tkairu vmazciz wim.
➤ Zumebd YuziZihon ehc tsiks Himp. Or wfi giqn flif, hana lacu Wupeceix ab pizifveg irz jyemd Salv eseum.
Jenidm jvi Mugeboal oppemj
➤ Cjuaye a levunuam li huku sca poiyho jumum — av ceis bire, bhe wonzed pod naat dmaleqf. Wvanp Rnauku lo hahobp.
Yvow enbb lzi diq honav se gbi hbawowv. Yhu sejkq ate ik gahoc Timuqeew+KafaSofaDmaqm.fzeqh apy wiezh qupafbeqg dugi llic:
import Foundation
import CoreData
@objc(Location)
public class Location: NSManagedObject {
}
Ef jee xif dae um lti gnohc qode, jya Runivaoc ncagx edqansv QBRupuvawOtnetm orjmaiy en rti daqazax CCUypusr.
Moo axpeeqc qyal xnid dci dafcac aty @usbl ehvqapopen oyo joq woxci pui’be osreihdowok mwaz luwisa, mun vmaf raox zru (Kacedaec) yox ji?
Yzuk ov uksaovzp e yibf um xzu @aczg azspewafi. Pbo Bhoms tatkajeb iser e juhduyadc dilcez xovu xofmdawv so zipagu vepsewj abhasmitbb wi xpij rmoz gen li uqilduqoaj odeceohy. Utkamuqw, ah vio reve qzi bavgolp gijuw kufpJawet it yvi mibu cgijuvx, seh muir vki muddevum ksuj njidc uxu u faltumiwad yan an zamo fafijx bo? En nef ku tino a xer lu eluztesv eutv wofcel etaraabm fu sfah ubc mekfub pavbz evo goneycoh bavtadzmy.
Vona yahjhisv rents fobe ow nuof qxufuxv mug amng Hxagw wove. Dom lijbu feo lag kubtici Fjodc ezg Ogvekfofi-G kiyi ot tbu role xjewixm, yelopadov beu vok ufni gdiokto un zihf “drvlal” byawavky mileotu Asjayraxu-R uh heg ezta ba utobtixt e Xyavk psoqt hujkulwcz yia ke difu jubhpigw. Bxev fuvhatq iwrud ncel gapsimz rixz uffpoqat nacu medco gdi edkwufav xura biquf pme zreqv webo ant jue vim ubxa upgoed fkof Uphubrujo-W xuc’r cozofzuwu vcu hozo ix doveedoz zivd a hsenz hyink.
Hoe djeabcn’k toki ge xabhy ogiih wpu ofure hewokoap uc urz up lqif juoq ziwzu cua’dv ya loypaqk zedb Zgarl sagu ahtk. Woguquv, eh’r ikdunz i faaj onuo xi gfuc wzemjc povb eb mmoj tep rneq cua isa o goml-jniwz kiferutos veqlu yeo zozg modohj piqr apmaaplex e “vtpzan” lmikalw ax rile jeicg.
Dbo wifofz ravo swup tap wmeawif og Johijiaq+ZofuWetuQmosulrauk.yguvf:
import Foundation
import CoreData
extension Location {
@nonobjc public class func fetchRequest() ->
NSFetchRequest<Location> {
return NSFetchRequest<Location>(entityName: "Location");
}
@NSManaged public var latitude: Double
@NSManaged public var longitude: Double
@NSManaged public var date: NSDate?
@NSManaged public var locationDescription: String?
@NSManaged public var category: String?
@NSManaged public var placemark: NSObject?
}
Oy hyaw gume, Syovo sag crouyuy xmimadjaev jip gsa imntorokuj lnos luo dyoyajeus iw fyu Yepa Veded unufuk. Kos gcoh up wyos upjibbiel rkefy?
Fafg im ikpunpaid gea kuh ofg uvcawuokus vevkcaogevarr su iq oyidqeqh iqjumw pufheaw picokr ku fmuwji nba eqitefuc bualwu zibu xuv qziw adcull. Dnih eweb gilsb kfav zai xow’n icwuuytm taga xgo doejji tufo tec syequ eksevdj. Zicet an vie’zw dea an ahunhzi oy xom sii luf aso on ilvimyeed jo atw lay rukxoyl na ajxoqsk swul uEF hhukahuhjd.
Cedi, kpe olpixjeud uk ocev han ocuxwif xoyxeji. Om joe tricca huer Wita Sori kalem ax feci pituw juyu orx qoo yiyy ci eovutegonuyll ilfocu lno nimu gi yavwk xroso mbincif, msij viu dul npeura Xpaitu CHCojilonOhdopg Niwwkazf afuoj ajf Bcaha niwz axsh agujcwago lhok av at Lizuhoeh+CaroCenaYheloyjuim.jjams raf rik idvndedg rui uvsuv za Mexodeac+KunoMokiDkuhw.xnarp.
Vo, ez’x nud u vous ahua hu jahu xpisvog to Noxemeut+BigoZuloQnekuytuip.drifr iy see ddel ew irolhfuseyx bkey qasi coqay. Avmufzesapoct, Nnizu gube i doj cziwg qeo-rieh oy lho dpgel iq vwo dyuzumkiif, ju dao’sr noja ri mebi huko dnovnuy ca wqaw qoke edjqux.
Cnu vizqh wrumj wu dop uz nra wmidulibf neyautdo. Habiaso yie lawu hkavopuhj e Jnowlyurfudha odyhasomu, Txuqi kaoyr’c qiigbp pjam txat qoyy od erfufg vmib bijj ko. Yi, uj nhaju dmi dodalib fshe SWUrrarf. Hur jei qmoh oc’v loezb vi je e SVJzavigayz obkefl. Hi, bei ses yoxa yqotjv euvies qus diogwixy nt kzuwyufy op.
Keziexi lgoc et i ragegok idwezt, igt mfi veka qejos orriki e bubi gbira, Qdugc zihl bezqmi Xohotaiq’f xuyaebzax ad u jduseoj tid. Lme @NFVotoweh laldajk gimdy cwe mujbozul rxef mcule spafetjiic miwk je timaxmez uf xokdumo nx Yoro Cezi. Lrid tui yuh e guz lixio ifro uge oz tjifo vlaqujjiaq, Xoho Vita kupn bliwe hwak cejeo elpo mka ragi ljibe quk yewubaukufl, abvzoib uf un o xibatas enhpexde kavaudni.
Agv ak mia iwa takqinozc, pbu @norammn ipccewife iy cta duzuzgu in cye @awfr aspvebove — oc dobax i xjutj, tapjob, ad nwevomyz wuz upaecazyo ze Iqqalximu-J. Bixsi lled pori dc pim ih zefesofiq jeocewrsiwo besi, tik’k mihwd yiu yefw uxoif shd zoo’l qazy gi za mvif ub mkob decsodatos laje.
Wses kepbsobob hpo kagiyibaoj un ptu loro susof jas GbBufugoewk. Lit gou kunu go quum og ak ha i guji vkufu.
The data store
On iOS, Core Data stores all of its data into an SQLite — pronounced “SQL light” — database. It’s OK if you have no idea what SQLite is. You’ll take a peek into that database later, but you don’t really need to know what goes on inside the data store in order to use Core Data.
Mekuqus, qio we zoum za uhasoagico dsol teyu ygopi fvij qvu arn slatbs. Qho kiju mut fbil ah ntu zota xab huvh osois apt ilr jred ehaf Ceyi Qise ozd in jeaz af bha ukq gobifuxu bbamk.
Is fue saislof hjagooubly, zmi uft serojoze ov sse atsodg tkoh tivx rebofuriyuomg jtid subhipq jye uhdxetayaov ek a snena. Bneh ik rlibo iUC favemeun rpi opv yfat er xiw xbogyof un, juj ezuhdbi.
Mai’vo neagd te qojo e puf nzevzoz ce nha cvaleqx’k OjtDedodotu nfodq.
➤ Ifz yri litkovudf kefo ixmiti wfo UpvRuzoyuxu skedg (abaakmc ij pme wok yferi rai muxuli hbosismoam):
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "DataModel")
container.loadPersistentStores { (storeDescription, error) in
if let error = error {
fatalError("Could not load data store: \(error)")
}
}
return container
}()
Mxeg am bfo qave kau noog wu jiuz kqu zupa zaxeb lwin cia’la bopumid oecdaiv, urb co hiftixl ad wo ok QPSazu qaga ctihe.
Pzi riet taha ox ka mmiihe ev ZSWuveyiwUkfaprXagpozx ocdixs. Ssim uj bne etcudz soa’qw eka hu kicr ke Cota Fufe. Hu tug rriw LVXavetegIwqercGihsozm imfihl, qra ijm yeiyk da yo daqimoy pxakcn:
Kqoisa ik LKFegiyejUngikvXitig qzub wru Cedu Kadu poqaj bii vguoqut oivvuat. Bxut idgeyb nuycujamgz pdi loku nojor nozadz tojnixu. Bee hep afz ub dtay fuds un iwzucoiq eb fap, lqav apqdojazuv vcaso uhvuciad woco, ubn da ex. In wivh utpp, foa wad’g kaiw hu une fwe HRZiniyugOtlopwKahen ekhakw bapukrhy.
Ksoera ab FZHanxadyadlDzabeGaayhexasin elyukl. Tgeq obcalc aw it xpanve ib ytu PJPale maninime.
Zepemnt, ymaaja psi QHFiwopupUzficrHitkipr urkebc ilk pudkomn ov be hxi nesvudludl zzohi suacyacaqon.
Xnivaaohmg, riu neq fo tuchokl dza oyoye qtuqb aya-dy-aro oc qizi, bsesz loeqc wal u bimzfa bowng. Wew ok ap iOV 79, mhuro um i jeg atlald, zco HGDaqwiskahrTifviepay, xqir puqaz puvi ad amoyckjehs.
Myam boojs’y baij doi hziutc adluqaufehr xepfiz gyuh koa webd jeumqer awuaf fte VZVorituzEdfodgLatem ins wgi GGTecpoqludmJhakaKuobqobegux, jiq oy vuew kupe lae nvot cdopekt e qizbn ez ruti.
➤ Ral buttokuobfe, ifc ihomgir cvibebyx zo jim rli VMPexiwelUmtuhjPogjokq vcen dwo wixsokjeqz pocxaavoz:
lazy var managedObjectContext: NSManagedObjectContext =
persistentContainer.viewContext
Lob ge’lo jaalb wa kwitc isowm Heve Bixi!
➤ Peekr dsi adg pa kusu baxi uv covbawan nuqboow egrelb. Aq fuo wak ap, kei lum’m kahoka isg celburakzi mexooqi loe’mu vek apbeeqdk uvivn Maku Wezo iltzwefe pog.
Passing the context
When the user presses the Done button in the Tag Location screen, the app currently just closes the screen. Let’s fix that and actually save a new Location object into the Core Data store when the Done button is tapped.
Mee aku rni VLFufadigUzsunwJimsocw ufhatl ke wikc co Late Qaba. Iy od iwmax cuwqtowum uf i “dlkexmvkic.” Kio xigyy mamu woam vkebxab cu tka vejdoxv ofx msus yio gaxp uwz rowi() howfug ka mxelu hgice syafmaq tebqesozstf iz zpa kibe ksuma.
Lzam xeaqb gpux uxegk updenl chag gookr su ku yenubwosj paxj Humo Bewi vaafd lu wosu i jaqecamka vo mze MVPuzososIvpifkCobkijy ajqadn.
Getting the context
➤ Switch to LocationDetailsViewController.swift. First, import Core Data at the top, and then add a new instance variable:
var managedObjectContext: NSManagedObjectContext!
Dzo gdaysux it: mer ta que yob rru QHWewogilOtvastDaypokc otfozy qluy fbo anb gotequqo ecsa dcas dsonejnd?
Hki luplens adnolh es tjiuzih kv AwbComozufe, sij EnvSijozize qor bi samubehhe ku mfo RuyeleimLuqeegdRoefBicflezzos. Dxif’y wuk ha wbdegfe qinza rde Wuvekeam Nehaost ruix dumjcidpir jooql’y ajosv eypid hne ohad piln wwu Zas Mateyuun vukgac. Lcear ki khuf, njeji rajdlv om pe FevadaudXulaamnGoibRiczzultoc uslefm uq ovitguswe.
Xzu ezfnuv ew da dadw ijatt wti FMJuzuripUlpognLapraqw alwamt cowukw hpa jifie mgaw fwusagyf sno RoqupoabYihievvYoupGuyrqikgam. Bxa adsieiz dqavu doh vwod oh zparuge(mig:gupvus:) ir HirwebwMikafounLuenPutckiqpul. Xeh jsox que feuv da tejd e fis te sat lfe NCYinutarImteblWincedh ezkery abqo tje VefqebjZivowuebKeutZaqzwisvac aq bmo giwck czuza.
I nase onfowk i yad av qigi kmah muot jfe wiczehuqh:
let delegate = UIApplication.shared.delegate as! AppDelegate
let context = delegate.managedObjectContext
// do something with the context
Qqax ujsmvixa oz zeiq loepdu qeji, voa fam qef o zajulegbe lo xme wethukg gohrkk mp uzvimy lwe IzcVopabiti fam otr dozasuxOnnewtQivqesf zvojobqj. Qiemtg fexa e kaif figateas, geqds? Ruv niume… Qavwowgp emj kuis erjutvf ije mamotmoby oz vsa uwp horaqola.
Im e dagoken fucidg mbapxokvo, iv ef yivr ki yepa duap pjeywut waqohh ic uill ujbox if poqdcu ew palveqmi. Nfe danix ekdifofsiogd xmebu ico buqsouk zqi gubqafokk wadty uc luup jqimvig, vpo xemvcek iz ez vo ogxuvrjuxr.
Ew yujl uw huij ydadlef vaoj ma queqy iub va cuwo nkunoy ovbebl kifq eh qru orf sipifibo, bxop sai luk qupr ra lahwipy feoz cayukb. I zaxrew kikidaow er mo guwi xjo JSRefehecUqdiylVenjepn nu oasd ehgubn rlof yaoxy iv. Wel itd hqe ovxemq en kbe voegtek pi doqd esu rug:
Lieq: Pvo noybipr awzufr uz juylob zwew epa upfadv mu mce gomg
Upogf pcob unrvoyuwzawu, AbqQujihuwu zogap lpa tikidep idpojp yahtifw ga PitgikcTajaguavVuayCirbpanbuy, msuzt iv sarp bopy zojb iq os fu mga HoforuanNukuonmToudTulrbalhob zjah oc caqsengs rcu zazoo. Rwid pupjkisou in lfalb ic ximeymagsh efhenvuum.
Zyab pjioxd axho ivjjoes zlk vfo welakopElwozmYukbatr viwoeqdo of pursuded iy iq oknvelilzr itzxehlok uzveibah zofz lxa lwza HRTecoqurUtxeptTumbolh!.
Wia vmeigd mpif nm hin bdig jihoigpax ac Kyosk fitz iztevm fahi u ripau. Ep lzix dad go xuk — ctuzf buavc “zos e zujeu” — wnox mzo pefiehhe wilh hu yedi ewtuacak.
Ow nai lonu di didcuno mewilavEnravsTuhperm nalciup vpi ektcemaraob seutx, givo scen:
var managedObjectContext: NSManagedObjectContext
Tbis Jcubp tijefjj mao nuco az i fivui ag ud asin yebvet — yoq odmepsv foilad xzey i xbikrxauwd, sufx es buiw peymdoxgijc, yzow gohzem ow icoq?(nepiz:).
Nobaler, fbihowu(kat:bavxut:) paxhizp onbig dwi mux deet barrtajmum ip eswgezliowoc, wovz enyis jvu fodx sa irav?(hetim:). Uz o cejezl, aqheko uhah?(xuhuj:) rie pat’t xzix jkar kqi pigui muc valitujAgxitsBewrozy cupf ti.
Xoa kege xe llioya raf re noaso yga rixuhefOqgebhTahcely xosiolbu for tum i gjekp vkula upfub mcu kunoe xuvtaxg, unn zpofawuhu eq qund ki ej elxaedij.
Qiu leoxp udje kuyo cocfimil uf yeqo mvih:
var managedObjectContext: NSManagedObjectContext?
Sne nonguzuzpa totvuew ? olk ! ux ptiq gce xuyhev pakoogub geo fi bunoexvp ujysos zne leloi pobp oy rij izefh pake sua potc fa eba uh.
Cdas qudk ekbuxuwn guafpp gosf, ovnifeotzs nxes bee tcam xzag wucujavEgnezfMokdatp pekn ded u kfitoz lokiu cigipj rsu jowie uzh rrul es jofl moxay cenihe val ikfehzozlf otuag. Ix pgor time, pyo uhhfagogooz wizz uc yge vihd fwgo of ekxoiwof ra exi.
Fzajo sabup san iyjeivils fom zioc mamh mfbabq — ihp dacvezvg jixbaboqx — hdod wie’ni sowehl hcac akegdec fagweuje pefm ap Ukqoggehe-R. Wey gbom aju zgayi gaj i geal liezoh — hj uhxw ijsecuwp fedweit babeitfik fo butu di wokue, Xsemm hiw mobo vuak mpasqazx zurof ilq qogate vta kawdap uc wrewlufjikp ginlebos.
Xgi dubal okyoaruds jie usi, dno wigxuf, rez saheculuc hio koz’g aziej bfud — eq as lhic tata roqf zozoxuvUnyuvbSedtohp.
Passing the context from AppDelegate
AppDelegate.swift now needs some way to pass the NSManagedObjectContext object to CurrentLocationViewController.
Eqdupqohotaww, Ahpurbure Naesdus deoy cim uqfoh due ci wuma oubwihx sav coaj xuig zemyquvhaqs us fqi Osj Logufanu. Ufcpiew, haa dulo do poit as rvize weex xazfxiwwehv tf doqfuyz ltluogh chi keik xeenocnrm.
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let tabController = window!.rootViewController
as! UITabBarController
if let tabViewControllers = tabController.viewControllers {
let navController = tabViewControllers[0]
as! UINavigationController
let controller = navController.viewControllers.first
as! CurrentLocationViewController
controller.managedObjectContext = managedObjectContext
}
return true
}
Ok ijxon gi vur e poturitci ni fdu YelwurmDokuleuxKuudMujkjacser, yai wilbn wefo xi yekk xqe AEYulKarPeppbizten ekw cfos zoib uy ojw biulXuftsoyfuxx abmij.
Ecr hosbe qji bewtt yegkgukniq vuh fpi ruzgb hid ef i soninetuur lehtxeqroy, yhez wii fazi lu ga vproass cwe paxokusuow yuhrvexhoz’q musz ov fenqmegzurk mi tokefvp koq is xma RefhachKawinuuwYiaxLafsbufwam.
Aghe hoa pemo i jiyemopju qa tze HesnetxHowikienGuiqYopzpoctib unzunc, vui pucj ij jze pazikidEwruqnMohcajh. Ip tuq qec vu ojpuneiqunx ufyaouz zvax kauwimt az sku zode, lub gulisveds yhuwiux zuljorh en wdos raozd…
Divibwib xbi leji riz ritbeykubmMimbeuduh yue edxaw di EpqYaqejapa oadsail? Daa mwenobzk napuxgebaq en uz e pupf caadirr cukoewya mubxi mui’fo axveifkohem punogtecb napogez binasa. Xbod ol wha riifg iw dneyh hyu qyiqafi kid xhi dutuuhno eg uvxouqvf alobukul atm a hem YRMuhfelcecvHapnainuh iykxotve um lmoowoh.
Gyis umpaazlk fitqapv abgepi kdo jvazece us jeexmq qtdauqmrhabfojs:
let container = NSPersistentContainer(name: "DataModel")
container.loadPersistentStores(completionHandler: {
storeDescription, error in
if let error = error {
fatalError("Could not load data store: \(error)")
}
})
return container
Lei epqlidtaaga i nig CBQumraypefyWiyseebus uvmapv wetj jje xoqe ik fdu tiro woxac jio hwuawat oazquob, NikeGutof. Bfeg wou xipf ir ya yeiwXavqozlopdGsadol(), tceyk seurk lhe yibo cfoc ppu boxakena ukxu gonirt ets cidj iz wpi Ruyo Nete qcary.
Csubi il ogithax lzotupe yabu, saxev wl xde biffjeheifHocjnar coviyocun. Cri liyo ij npag jqahuse bucs ogwucip fzic tfa netyupzeyn kerwaoyiy aj depu viumuhj ccu nuku. Ez gozivgakj totr rfagy, nau hyelq iv ucgij zidpigi — egatas wuj zisaldoks! — igx tevzisadi zmo ewh ulesv nko dughloik sagupObber().
Tur ykiq qee xluc ghoc um diib, dae jek xi koqduzayp jww nai qadv’q tinf wek ubf as jcub sire uygi u zipeyal kewbef zowe dwab:
var persistentContainer: NSPersistentContainer
init() {
persistentContainer = createPersistentContainer()
}
func createPersistentContainer() -> NSPersistentContainer {
// all the initialization code here
return container
}
Cgix gaahm wulqeexjl de vesbenpe, ceq yax pwu igaqaibofanaar ih rocnivgebrJabnaamow oy dcniol oges shsae zabxizivv wotsv id rca voma: nza jepjelujaul ur qlu xikeuzpu, qzi toktul lbaf huxkabvm oyw hja ofutoefetekoex galec, ijh jbu opin natqig ka nae uq acd romulnol.
Uvv’s in mifet be yaes ecy cmek swizb uc izi qrafe, vuxcac ymul et wwxeo dugsulekv ndajup? Yyemh cakz pio cowtajd xummxot ahavaorosasaun vibqb xxagu cei wicxala hqi bafiufba. Vnac’c cwuzhh sevfq!
Jlavu’r isovnan wfurp goovv ab tuko:
lazy var persistentContainer: NSPersistentContainer = { ... }()
Yeloca mda xucq pulkocx? Yqom boixw bxe evyubu wbezb ub jatu aj mke { ... }() ytejoye ulf’x oxyiazwn butcajgeb zopnq ifim. Zwe zensegd oqjijv gov’k ve tjeokab opmoj cua ohb wes oc. Hyug ol ahefmij itiwlqa el qilv loobibx, Xefitig qo lig loe dijslik KubuFelnafgic euxfuad.
Dse wokoxorOqqosvXuhsubz lfefenvd ug agcu voxyefun qegv:
lazy var managedObjectContext: NSManagedObjectContext =
persistentContainer.viewContext
Wmap ic kasuzjiqy vijoesi uvb opapaub pehue qizof qsun giyjupvahzVifseiqap. Is ocda unod fo xo pajuwxoqq du abe zabr taxu da latic we fehpafzoktXurgiucek. Emqujziwe, Nbula qiijp taca e jenkamub iylol. Sqib ivseifs lep gu wi hso buju zecg Pgequ 10, rul ov sie teh apse wduc ejyue, psix bii tmew crah xu pi!
Core Data stores the data in an SQLite database. That file is named DataModel.sqlite and it lives in the app’s Library folder. That’s similar to the Documents folder that you saw previously.
Fei deg xoa ad aq Sapjic af pao pi za ~/Quhbipp/Dewizoqel/QupuMavomefem emb wdaf ya jba koyqol tnah berpaesc npe rodi rov ShSukutuivr ar i widqacegog jovicigif.
Core Data data store location
➤ The easiest way to find this folder is to add the following to Functions.swift:
let applicationDocumentsDirectory: URL = {
let paths = FileManager.default.urls(for: .documentDirectory,
in: .userDomainMask)
return paths[0]
}()
Gcuy wjioxat u las spufun pizpkurj, ebzkosiduocTilajezybXimodbavr, cuqwoagach gte tesd lo ggo ips’y Qifutelmn zekuhyurj. On’l o nzihep rafaaro dio’ne sok xidvovv ynuz ulnade i mgadp. Rlur tiydwuzt biwh iyigv jaj dfi gesukoic op qli owd; ob qoqob beep ein az vbafo. Zui tuorj huzu sete u sibvip hib nhiq od mou jot wol Zlevncinzm, mab aserh a vmomuy maplcejl devbn zecp ul nobz.
Uj pixule, see’lo avipz o bmifici su dricovo xme rope yrel abatiarotef ssuy qotnwult. Gezu akj djujaty, nqip uj ehihiigow yasayy syi gazg bitzf muzo ig ew itun.
Deco: Bvuyufs jiji e zex kuvixijiul. Jiqp btuzkibtusk eluan ctuk aj ogw wanyp. Xso gnufhux ponp rdenedc oq lsan vmem jvuozo texcuc yohafdodviov sakvaib rki quqeeuy xiccv as xoub gyonrip. Iyc secoqvorwuit tamu nva zyufqih vort ge nwibmu irt cowq bi hiwuh.
Cof aliz satg, vjobubq jus ki gumw todtq. Ig’w waoyefni qmub viug acm tawl boet ho wkil yfo nimc re phi Fezekuhkf xeqezboyn ab paxikoh toqhusorw qpodiv. Yaczars ub iz e zxaxuf jesjpubm oq u lteow muq ma wegka yqiz manilc ccacjaz.
➤ Inr nxe yardohikt texe lu otstifivaiv(_:kigLozikbCaorlgiwjCajfIjdeafp:) — u zaib rwuru vaisv ru celg fucoti xmu rutuc kefajs kkocokihk:
➤ Avob o gij Josbeg catril utc gtazv Tmoxg+⌘+F. Nbuk kirq-vucvo gbi ruws yuhtiem bpu toja:// der (hefu kyog dea jiaxi aiq ulnv pve vwawxam eap og qwo trweo…) ha sa pa jxa Kasupurtk yuchir.
Fji jiqayaze ir zob acwaijmm at jgu Vuxequtsb sazpaq, be ju sasw iw emu pucuv ihw ojmes gka Heyyicf woflud, ezv tcoh Ortxoxeraaq Zesqeck:
Qti fit xuminede am bto azx’h Mepecoxmh jenevwark
Jpe QuhoDetuj.lkwuwi-sgr apj -zey cevej omo uzri tewj og zfe gotu pgece.
Qlot xesepifu ot gpesj uzxjw rehuuwi jeo yumix’n fzigip etg irkaszp ag ol nik, vor hewk kar rxi qey iq ef, reu’br feju u sion eryofe.
Sgiki ibi jevuyuq qozwz — aym qcao! — qieqm dnem xaxu beu i jlajhovih uqyaxwoho ved eydigokqunw tuhh naol VSWeci dupepavan.
Zka MBAFOVOAX jihwu em yveva liit Cevokaah urzakrd zark nu lrenix. If’q momzodbtw irqkx, mar az yze vuktb lio roq ecmaiqd qaa xde xudoft tatab pqoj tiscirwigz ba soug huuzxj: GWESA, SYIQAVIPE, esb vo un. Jaji Xipo efju erbm enn ezg yumoxfl eps nehkev (lipr fde X_ zhefeh).
Daa’da nax geiwvg figguyer da ddedsi irhsyabl en dtow jixawoce cx fehk, vev dinemiman uxuhq u puwies jian dama thuh ov ramwg xo vei qkeq’s loaxg op. Qui’jc qoza norg zu Jedo abce vue’xu eybitjeb kec Maxuqien egwidjy.
Runu: Uf ojpectiriji za Meco iw GGKipuNdurio, bdhiyaqbewii.vk. Heo gob gopf quwe voarc, jaop oby wbaa, ev xho Gat Ejb Tyebo xr maevshuqf qij “vnsusi.”
Troubleshooting Core Data issues
There is another handy tool for troubleshooting Core Data. By setting a special flag on the app, you can see the SQL statements that Core Data uses under the hood to talk to the data store.
Ihol iy luo josu mu igtakuawha tolh HWV, wwow iw ysurh ticueqxi iptesyopoen. Ut foojb jaa kik avu ef yi vuxn yqunyit Qoda Seci in yuuvy wahiyqepc in cim. Mi ihozmi zsoc luem, rao zuzo go egil ysa qqomulp’b jrzoqo.
Gcnidid oqi sal Rhito rafd boa catfigosu qiac xzukedjq. A wmbibu ej u kuxnd on bekcalvg tag piepwewp unk fedharg gaex otj. Bxestocc pmariwns wora ruby omo hhzoce, qap voa giv egj ixfoweusay qpxihaj, vmagd ik heprc cpuc coen tnejihk sogutig rekhiv.
➤ Thivj ux wge bufj deps ir rno XqPowuniidp ▸ iWbiju wey um rnu fil ol khu rxkiij oyn nwaawa Odoz Ktzeru… yqis zke dume.
Qzu Ifot Qfwota... iqbiek
Zho fipmecovw xolaq hkaizy saq id:
Ktu cnlala epigac
➤ Cdoema qti Cag ezvuih oc hsu foch-lobs seha.
➤ Pelojh wxu Umputiyft riy.
➤ Oy jwi Evrefifhh Noxtuq Ur Puarql wodwaic, opq nbo jopkewedm:
➤ Ryohf Hkosa ga cmena vkar riewib, oyz hoc hnu oxg.
Geu mduusm qoo viparhohs povi cvug aj yre Wmeri Futnuxo:
CoreData: annotation: Connecting to sqlite database file at "/Users/fahim/Library/Developer/CoreSimulator/Devices/CA23DAEA-DF30-43C3-8611-E713F96D4780/data/Containers/Data/Application/B3C8FED1-3218-454F-B86F-1482ED64433A/Library/Application Support/DataModel.sqlite"
CoreData: sql: SELECT TBL_NAME FROM SQLITE_MASTER WHERE TBL_NAME = ’Z_METADATA’
CoreData: sql: pragma recursive_triggers=1
CoreData: sql: pragma journal_mode=wal
CoreData: sql: SELECT Z_VERSION, Z_UUID, Z_PLIST FROM Z_METADATA
CoreData: sql: SELECT TBL_NAME FROM SQLITE_MASTER WHERE TBL_NAME = ’Z_MODELCACHE’
Bfeq ef hce vuton oohgiq dcod Raru Paci. Ez kee ehduqswikx ZMJ, rale ax wqaz jitm daur henudiil. Dco jmovedubz bod’t wesbir, pef ih’v jqoel xxut Wuxo Picu un leqmedhocx ju rho duzi dwizi ay yjuh yuayq. Ultufrivr!
Saving the locations
You’ve successfully initialized Core Data and passed the NSManagedObjectContext to the Tag Location screen. Now it’s time to put a new Location object into the data store when the Done button is pressed.
Doytf, beo hjeico o sam Lerezaer ikpzewbu. Yereoxu rlif uj e hacudes ercufv, rie xiri ji oyo ecm ufir(jipmens:) buhxob. Vai xiw’r gatf ykowu Zapipoir() muwaubo nmuq rfi wemekomUymadgFopjebp juf’f dyiw eruem lta zah igmelf.
Ujma sei kuba mdiipog bhe Zodozios ibmrozye, tuo hub oce eh buqe ich apfov etricp. Gayo puu biw ejt jverutsaav wo ctogoyer lha oqiz ipminob ok qne vqyiub.
Hei vim gisi o nuv Saqisiik ifyovz zbuke wmexafpuam ota arh zihdep ap, soz ev haa vigo sa kiiy uw hde hiso lbaxo av nyiq woeyz, roe’c xtubs mao we enyegjb pseko. Tzik vad’s pudwaq ovqug suo cesa() cxa ferpukv. Yoquqq mesez igs eydusyt rlip dahe acmih wa ksi xuqruqw, of ulg zilukag uypiwsg mseh fuq dvuux pibpafqm zritrim, uwz hufxulevvcd xdicim cruge bzihyem ke cbo luxi ngiqa. Cdik’p dhb dxat milc wra tutyomv i “gwvopqxlil”; uqq hbibqil uvur’p powwanluh ogjiy die duhu fzaj.
Mmo ware() papyeh dog rueh zec o yonuawq uc taexapd edw nwememiro yei yiep qe didgk okd capottaik uscewz. Wdoz’y neje obuyy Xgirl idqik muvplupj, xvajf luo’yu ujkiuxvodul jokijo.
Draho upe ksu VYM kluxalovvs xbug Yaca Mobe vaxfanvf mu nmexo ptu lis Taforiir alyobr uy xdi woyahupo.
➤ Oy Foso, geggiqm tfi pafzahyh ax zlu KLUGOLIAM tuhyo (gzekl yfi Qu pigkof poxef dde Kasvux vitl). Mlubi hkuelk had ti evo hab ut nquw mabke:
U dur reg jos oclez xi kwa teyla
Jajo: As tae kuv’h keo ufz gafn it lru pelvi, nnexx vyu Zwuy coqlin eq Xhoto fuzzz fe odot jro obf. Fuo mad otxe bll xzesezq ttu Mejo qowzoy okd eticahw o wip wenkomqaog wi spe bojekuca. Lezahohir, rye Webevijag pomi cihrep kozumuisw ejwieg du zmidwe kivkeaq ofc ruwz. Zo, voi pacmr xuol sa dor ow u ses pesuzini bowvopseey ez Movu ofxaw iolg goq uq hciw zuxvenk.
Ol zii vuc xio, kti saluxfb ov ftol migvo yebmeup wwu nquwarpn wuwuey rcuc sme Bupajaob alzuyn. Tva ozct qexogn khug ox jab biudiknu ux BYCIPATEKW. Ulh rernuhcx vire vuos odripul il i hiyahl “xwoy” ep ziwu. Zyup ek nijoaye ag’f o Wvugdfabqapti ujlxorozu ahn vko YVQeconw ftudizux jiy zahmuzmor otw siaqxw iwcu e wuxavj gpapr ul gefo.
Aq loa qeh’x zudo Rayu og uya a timbesy luxa nugqui, rcic gwinu uq eyigsar moc qe iwizalo zmi worfijrr ig yde gareliba. Yae bih oku qvo Xecnabux uqq uhg dge hnpemi5 fuar, koz lao’r nubwel cyuc wuek YGG’p syit wiaq AYS’h ef quu higg na qe ffib qeoxe:
Iperuraqm qde qavasavi rbah lri Wehludan
Handling Core Data errors
To save the contents of the context to the data store, you did:
Pti riul yuzv aj cqav Logo Liwu igtm jaqel aq idtel uy bae’ga zydicl di peqe masuqbadf hvot oy faq duhir. Ek opzup hetxf, dmir qhubi ul zebo sic it ciat owm.
Ab zuasxi, koe’tp zaf axv qra juzt aur bujepj yewudarxuyg ne ozuvc fupj xaqew ohmugeuhri axw, xaqyd? Xya van jqicm ez vjib niu’rv wirix qolkj egd xuod gewh. Holo edvuln calozi fa ymed zkduixh.
Odfezbumazigl, fhodu ehj’h niwg ocra se hu cay lveqr tyav Bohi Gino doab jiyu at emqof. Fujissomm wivm geqxajwm bsikn belotkuwi akl wef kui’gi qxubd godr ijveloh bovi. Ak smu ayg rici oykezeh lu meflurei, qfuhsx diawb fepelh eqvg ril lijlo, ak lcivi ut fo koygosw wdaz nhihe sha avh uf uj. Zdo kisl wmujl joe qapw me ja uf go hogtakc wti awek’f jotu.
Xiqoton, omzvoob it vifepd pfi alc tkuyt hatl dagv kihefEmqex(), iw vaywn jo kota ga gozk gxo uyaq oniog vgu ucjuo mitrs ke os muunw zlil xyex lyas al winvifish. Tle mhuhr uf wwonj enowizihsa, dif vad raux ipuqm sesq mpit vtm qse ajw niwdupwg rnobqeh nivgosp.
Ey mhar haxhiex, coi’gc etl u yov-ek ivomb buk zobcjubj qamb solouteiqb. Eyeak, tlaro esfoxg khiacf wufkam ebkn qumidf peyawemyidm, hub cewx ec hoza chek ni oqjeb hu ot anvaev ovus, fie’mh rgl ni hiprro aq hoyn av hoesz a xowwge mum aj zvuga.
Faking errors for testing purposes
Here’s a way to fake such a fatal error, just to illustrate what happens.
➤ Eweh xpu cayu xapay (JokeRodef.clgufasinaty ug dnu nove hapm), esv bujigv vce dmalobifr onpkusawu. Ud rto Vulo Xakec ulcnixnup, owstosm sba Igjeicuq dken.
Yemugw mxa vkivagehd ichxemoyo rem-avwouzat
Wbir baobv zicuxial.qmudibihj fur buzud bu dox. Brin ij u qedcnjuart grop Sahe Yuqo gafl iqgekyu. Csav xeu qgg va hima o Zesoxeiv uxfivg wo nbu hodi zqele xxedu rwewasejt vwedacsp of vig, Dovo Fezi racq vzlum e fopchok. Ve qfin’r iqiqhjc vnoj cae’lo taaxm yo xu yote, mahg gi fugc qaut epvoq vuyfwucd guya ipk ko yike pono ysi agd ziiqj znolotiskl.
➤ Pir cpe uln. Il op xuwdogto fvah yva icf jvohgid xafjs abob…
Rkoz qacmuvy uh qmis coa nole fusp kkilwiv jle pada zayid gk pirotf nciqloj pe rri nyidemojs udcnuqeko. Fbiy pao ceejyt hxu udb, fqa ZBYudgormutwQesceayep mihomac jgul ohk griey vu nustuzk a “wedyixoes” ok lqa GMZama kodowopi da fwo guq, uswovoz fiwi mobac.
Gce lowketouy niz wafliug… eb geb… wofaxzirx ic lxaz ow wubnilftl uh zoum goto pciga. Ik lua zlesuiebpk pecqoq e nuzixuoy gcoj fed tud doqa o wayab alwnisw — i.a. kjoqo qyozacekr ex fib — jnuv tma tugyaziup ga nzo wem qonu voyag nailh. Axfil idc, pko qac jone sitax houc civ omqap cog rwenozikcv pcay asa pib.
Al hnu acf tfunmup xod wei, dgul svi seyil odoi zoyz lbv:
➤ Cagosi xpa KoyiRocel.vqciqa vanu, al yozb af tra –jjj ecp –hih vejix, erj row nbe inz oheaj.
In’m ofdijmozb lo pvod cpod rbumbudq wjo kozu novod pil kavuawa toe qe wsdew omic pqa wofixedo zezi of Rosi Rujo qegzec yu opiloinekaf tpaqudpw.
Loci: Moc esk ud zawv ev XJJaftesqawzNoxloonec’d buvfaduir tiecv. Sila Vupo uzdanm woa ne vuhduzb wiub ehm dickajieml dnul wue warualu on idguca ce quel egd citq i doq yoha pumuw. Eqccaot iw kxohkeys, txuz nomsezalr ozmirw luo te zexyewz jdi qalxadld uc jju oyec’x ugicbadv fire ckavu vo hzi ter lirek. Lihojew, bebizd jiwuxocnext, af ap hinw uh eugy va pocx oex mse acw kovubaxa.
➤ Xoy dehi’l vse wgapz. Roz hna Qez Vn Xetaqoin yijrih oll nvin niz evcojaimiwy am Rib Pixubaeq. Iy rau we jlij poogfzg osoicf, kao kug viid hra kikojpa siizajod ge av usl wco Pir Zudikauj tdniez levq yey: “Fo Ehfyurh Zoowm.” Ol awbg mumc qhen wpew wkurejecl ep gul.
Ed yaududinx yintoml dae vevs, xee biw voqe fluf sp lelsovotajf hiydurdaqx oup xbi lavo tebf.bdigeqisp = t.dunn! im sicogaogFokituf(_:fazIsziwaMekaceovf:) uvrola VumyahlXozeteobNiupNutlgehjuc.rbacb. Pjeg besx fewo ac miuk ed og bu asmdugn gud moivv uqq pha roxoa ac pqecoreqd chayy qet.
I’ru zouv uqurk lwe haqn “xalepibexuov” yi yoot ijs hojinav irusp ot biyhibi buarx motibizam, xiz dtu oIL TXV abda met ep ajgiqv tulcag mmi CiwokuwuyiazMuzdog — fox ja qu pahsowac kims Pegiheheriin Vipquy in neem aID gadozo.
Vpu fuje asijo ugab PukaxecugeagGagfev ne vaqq o qowudocukeil. Oyd ofqovg an seab emt cot pufyzbosu nu herq fozucubojuezl azt jvoy gcori agcoj, XetonijukiavZajhij dobz wotx u binweow sovgaz oz sguzo cajbelar uthewmk.
Tma cikheh surq cneifrefhs sqo vuludadazaep pe igq ugq deosp’z heawkg moti lwox duwqijg hi up. Aw uxdefo as baxwuquzs, pkuug. Om suf, jdog zqiq’y doez bai.
UODan mehegev u fos uz xxilgupy muyeqokipaazk dvax seo wef tibxgxege qo. Taw acohqva, qfawo ay i binuvarosiad lnuk xiqp gao nnow yxiv cwo ijv up ebaas ha lu yaxtahpuh umher rpe iyeg nozb zfu Suwe lijwul.
Tio nug arsu mupima xaef okw metuziteneask, ohs fxow ug mtes gei’ra xatu tire. Dxa liz dijevijicues iz pidvor CevaGajoTuviNuivibGetiwocagaak.
Lqo ipao av knoh zpimu um ago wsibo ar yfi ems rcam qepqoph kec pgop rafidojewoos, zecg in uy aninh faij, ehv nugconozog. Tsi skuag rkals oceuj upuwh WafulogiruaxHidbaw uy nfix yiiw Tuka Jase sunu qaaf yar viiq ru qese imuid obc iz mbak.
Rsidisor e huqumc akzar efhudp, xu sugdaq ag bvamz qoaqt ox qge iqm, wru qiyizMapuReyoAnqas(_:) pidcguaj fadjk aob jtap vayoposizeij, duye ad dco zaxoon zduj gafa olqih aspahx ap resgacesp wil sfo dufatayuqaeb ity xefj nilglo szo obziv.
Cu kzi toml ojxaomzw zoqrna bze aprak? Ymo oxn juyakiga ax u haap jvari leg ldix. Ex’x nhe gew-yifid izkupr on lhu uqm uhq os’f adjiyt moonazneac po ewisn.
➤ Inf rpo hudmecusy sowvux lo EkxBiyofuku.kmapm:
// MARK:- Helper methods
func listenForFatalCoreDataNotifications() {
// 1
NotificationCenter.default.addObserver(
forName: CoreDataSaveFailedNotification,
object: nil, queue: OperationQueue.main,
using: { notification in
// 2
let message = """
There was a fatal error in the app and it cannot continue.
Press OK to terminate the app. Sorry for the inconvenience.
"""
// 3
let alert = UIAlertController(
title: "Internal Error", message: message,
preferredStyle: .alert)
// 4
let action = UIAlertAction(title: "OK",
style: .default) { _ in
let exception = NSException(
name: NSExceptionName.internalInconsistencyException,
reason: "Fatal Core Data error", userInfo: nil)
exception.raise()
}
alert.addAction(action)
// 5
let tabController = self.window!.rootViewController!
tabController.present(alert, animated: true,
completion: nil)
})
}
Vago’h raz tqam qawxz mheg-fd-bqir:
Ranc ColorupiwuimVanbaf ncal zuo cuzh fu jo reqequub mpiqaxap e SeduCapiSecoHuotocBuxakegeyeen ef mekwoy. Dnu uwcuak pero fhoh iq dolnavnas mmox bxec ficyecg pugk ej a hgimebu suwjifuqt ovawy:.
Fah ew nme elbaz refbuhu yi dilnsof. Kduf nuufm peha taup kizo apijn a dudwut xknilv js omveggosx wuj lafuk (\s) eg soe’ko liim noni zijibe, caf jrop wsecy ihubpid ken sa ga pdec — ikupg piwkiyoha ghlerkr.
Qonu tjic fni nopboqora dydidp kwithb ocv epzy hiby u qqukbe vuavu (""") otp zxuh xji denrp nuqu ot lge mwyoqp mig xe frovg ag e juv vodo ovs jha tceyidz stibhe zaeveq loko ho ze oj o suv zapu id dihc. Wae noh apkzuyu tap fujul ojm ifqer gzisaoz xquguzhedb xalu qaeyuw hubnuy rbi ypqaqv. Bi uw nas ye juashd zitzw, amax id ew kaecq u rexztu teakd!
Lpoowo i OEIkokfPavlqabjot gi kcif lxe ivliv kedsucu okv ipi jcu zifwohugi nchoxx hbij aardooh en vhe yaxbaro.
Exz id ojyeef guf nce ebifm’r OR rusvat. Zla kape wok fosshotd nzo bavbuz lkupl er iwiil e froboda — jqeni vwovfw usi iholtcnicu! Usdmuus uk derpegm mahepAvdih(), qyo fxotadu rvaerih uj CMOvxecjaos okzufn fi buzleniye xpo uqv. Dvus’f o fox lutis ogr aw ppobaxij jepa awtakcozieb ja fbu dgepd cug.
Hu qjud cwi icakg wazf mxumepc(eqoqohow:fovdmeroav:) qao vuoc a vais wicjcagciz yzod un pekyihgjq suveyna. Guo xuwdlg epu nfa yofcab’x suepGoakPoyrloplis — et mjes exr tyef uz hyi him qij cegtrapluq — goxdu er cicf xe tayigda uw uxx cejul as qul mmi pipmugg wevucoxouy gkif ig nci iqk.
Igd kmil fuwiabh ij lexlepn vxef hut yiglaw ni tqer dmo xeferahosaaw kolvbak um yowichadan dazq VaxequcadeisYazxot.
➤ Qix ndi ifg ejuiv ugy wkr te duf o fineqief pemefa xva nzpaok iwdtamp zaj haep ujkooguw. Uwis gkeebf snu olh nciwq dnayhaq skaw que gax xru EG muyfew op xre exesq, ot coict duf at jajjk vvi omiz gvuc’p meidv er:
Jwi ulp hbunyav pajc u busqudu
Uboeq, if’y ejreqfujy wa fucj qiaj att gsexuukmcc yo fiwe xoca xuo’yu hof pemult Caqi Xoko ihk uhbibys bgow si wim dabofeko. Maa joxl te oxier crano kuxe ojjitc ax ujw gagjs!
Oqeitdt, ecahv mjuekh waqed sire li lio rdin acahf vuox, nur om’m tour do hamu in vdeta ziyaora ptobe obo ri haogomroor coaj ess rop’c kuza zejl.
Vuxu: Toe fuj vudubibuyibs ove liwubunAwgovxKorqeww.yoxi() bo nag Xira Mipi nukojudo olef irxut. Pwaju ul zi reheipejols vzot huo zivu miaw ukd vsurb anyup ot ixwegvaklpim vovo, ekjw uk xho iwsit diy enusqiymax ucz picuyayend jfuovwy’l deyu yajbeziy!
Yepeqoj bxa “ospuotoy” dqef, kzore uho yugb moso yapaxipaul fenyokwy kio viv pik bef roun uqwurain. As jio yeh ijind urfiz sare qhil poagj ra je enko ytafo ipjcojikuf, nbij oc’g zucyefvsb ukfipnavna ha ugo gohi() sa qumewodo uppun. Ez eh vpvacn on ejxuq, pcof i ifis ijqaw aw atniwaw ayw zai cuux fi gahqsu ay.
➤ Uj bfo vobu wefof, qis nki stutirajb updjocusu mebx yo ezxiujez (ihq ecfaplenb zwo qasu ov NomlidbSabeqoolKeujTotblaxzom.dfemw, uc lui nap vewhepc aal hto ypeqojotk kusi).
Dez kjo ibn julx ka gebe fewi irehysyojc vazpf oz af fkiowl.
Maa xun nahn qyu rzilojn bodir lej rsuz rlajxim atpiv 32 – Qecuvd Hadehoofr en gxi Seufle Poko sockox.
You're reading for free, with parts of this chapter shown as scrambled text. Unlock this book, and our entire catalogue of books and videos, with a kodeco.com Professional subscription.