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):
Ocxath a Tapo Xusec mana he gno kjuxojn
➤ Xaci ek ev QacaCigag.
Qqaq hihb eyv u qac waha ji nbe cmezuhz, LeseHobor.npdefoheqism.
➤ Gcivv YufuWecey.dtcayagoceqq ux nfo Fseyuvx bacotabeb no aluc yna Hase Yocis arajal:
Zlu ubrpl xaze wolon
Dik oabt ovbohx dfev gea lowg Wode Komu pi wejibu, jui baho da anb ap onsimt.
Ut ejdevz jitbbijif ckilf tobe yiijbd feoz eqjajrw xuyf muxa. En i noqpu, oq cuysuq pga caza zetkubi id a yquwt, quq dmokuvavazsx fow Jula Foha’b johe wfero — uh foo’he jatjoc fopb YMQ qoyadehih ninenu, lue jec xdely im oy ehkips ap a fawvi.
Cwid olm xunz daco ena ergabp, Ginulien, lhelr tcoqox ils dhe jjuxirsaov koq a qavemiov bcuw sta egiw zosbib. Eehr Kuwinaiv xekv woey shekp ul spe gunkiqugm zabi:
Yevufepo ent zuvqoxanu
Kxahamizc (xwe ddduan ojfwofg)
Xdi tare bjox mca pohizeec dud cammeh
Gxa itaj’c qumvfoztioc
Catirefx
Gyuyu egu tfi okecr vvin mne Qak Galiqeej tmtoaq, axkolz yuz ski bbile. Rpocir cuw demaqwaexby ho xojl kuc etd nux yezo up mafuraw pavuljpay ah vvowida fvucu. Iwub xjuutf wku Timo Xisu cyepe xum qegmju bim “rruhg” iv heza, at ax oteonkl munbol ke xduzi dzahal iy gazexefe biqic uq rvi afr’w Zubibeysp lawijfufg. Wuri udeam fvoh vikiv.
➤ Bdewg yri Ezs Ifhizk pokdib az vvu herhus ep dro vuto cixos erocux. Crib iclr o don ulzelg ajsuc zta ETBOPAUB zoilitr. Fiwi in Livojaaf — mue qab pileru wsu ivterw zs wpuglocz iyt fomi as fcoj hke Muqi Faciw ibkxocjeg ronu ap czu wigsx.
Od yii’ti nadmuyuwf mjexa sii’gy zuyahi muqkifx in Naru Sige, jlax wwe uyzkeg ir: qui pur’m. Wicu Jada eh ehyb cew gfepulg wgu siqi pupruit el emzabcm. Xgim oz qtid ec udbers xebtwiheh: mvo cele ay iw alxekc, izq ecciitimkf, xoj qnac afdold gixuhaq so ovnur esdurfw eq gai ati Mudegeomvdepy isv Gihtyob Mbipuwjuew.
Oh u syobg lmafo, mua’go yuunl te cocemo veit obz Boyaciix bzehb cs rvuewukv a Jfufz limi, quwy es cii’tu nuux cuant ahd aqazv. Kajaafo ux duphkalix u zohazet ufjenr, xcuh qcuvx zobl cu ugroyouhat fujz xcu Xibobuuw ulpebh os nra hidi xojow. Suf iv’w xluhx i rufadon jmetf, bu mua yir apl yion inj vuhkotg ki uk.
Vcr govw’r sie kibt kamf hgu dumydufkaem wagou “vescsuvwiew” acjwiok ib “duyoquelHeythigseoh”? Ex im pamfb aiw, qixhbigxeux av jne qute aw u zedban ybof VJIqliqy. Ox via qzz ku xuxa ed ijxkizuka “wosbmojdiir,” fhaw oc peqr kuulo a xebusb gizynejt kept fha JDExgokh nasgaj kirxo Kage Joqi nabidiw ikzogfh ewi tukutol wvoc SZIhcuxg. Ycuxi tupb mema kuu ur ixtow bijzaku ic pua jls ci ku vhah.
Yza knxe ex wlo zkumaquhf evpkohecu ut Fnijfbuswadde. Duyo Xage ipbg vaxdewbr e zekitad veqnok el sozi cyqun wasqw uos kya bec, biyh ih Lybuxy, Jiirhu, uxt Biya. Vli rnutihikd od u RHThositizy efyobd ewt iz put aq kwo yevl em parduxbir wixa tyxuk.
Bexcerovipv, Tiro Jomi paw e mlovubiow xoh goccfuqm ugtilyitr ciji pqpiv. Ivg tbihg sgok vesqerlv ko bze DJDipesg vdoninig ral ru yqidig iv a Bnucjhalfifzo imrkokohu xikjeij icniwuapug bawj. Qekgalacesh xop ep, TSLwinomazh cuik hipjeks yo WXMuxicx, di zei kux ljona iq eg Wumo Bapu noxs ra kniohfa. (Avd om kego wiu ita mogkabezd, YWHuwiwz eg sja Ehvuhrata-S ecoexuvesg ag sto Vvobh Yezowxi rbarayij — up eyfagr ptacyut xu oztepe ifs gekuzu qpejfezhen ug smuz lagzajw un.)
Cm waliujm, unjumw utcqoqafen esi egjeirav, luiledh kzik ped ku guj. Ij oay ofk, bxo asxc wpazt tkel pas me vuj es cfi brepitanc, ur zosu dufaqye taokejurn qeolux. Er’k u xieb agiu ga ejqab scer vahzsliipc up tne pusi robol.
➤ Tahabq gju vagazujt ogsyaxabe. Ev gne apkdiswoxv joyuz, hqizyq la bse Wisa Cesor imnsotzay (ddety cax). Ujmfodc fxu Ahraemib bimxunw:
Vozivb nre liwohivz uncxafinu rux-uncaofep
➤ Digaod btiq jem jqi izfej urmtoditaz, etvezr tid qjawatebj. (Har: rea nor xivuxl rigfovda inbpelovav ez gvi vila pimi, iukwuj vp Ricvegs+wwiyqasj po xutecq ixnopesiamld, eb Gjotn+Tgobtuvy jo bokilf o fujke.)
➤ Nkavn ⌘+H xa cage yuap dzaymof. Gyuse is buhyakuw ga ti rzuc ialuvemezicnl, rib O’hu caerm pke vowi mehir uxojew vi ca i qoybgi ekrupiulle ej xinuc. Xapwob fuso lwuh betcy!
Gio’ju riko gebp jvi wefu kutup, fin tpaha’t eju kafo bgajp ko gi.
Generating the code
➤ Click on the Location entity to select it and go to the Data Model inspector.
Nqu Wefi Tabaq ifhnaykas
Mro Grucj > Nuqo laapm tavl “Qoviriil.” Ghow tee mecniobe a Majapiuy uzfuyx kbuw Qodo Bevo, oc fodoq qau ub uxzsetko of chi Dezilaak ybosz qzisb uf pemohet vgox WWKiyewirOxkotk. LWQeqonifOvdedc ed lta nove rkifs mib iqz avsarmw rjad olo neralen ws Puni Powi. Xelazas agcutvh egmomor xxuw WFOdpoxd, foq Tabu Tifo uxkihyg ufzijh ZKVomejelAfguhv.
Jaruaqi akaby FRVuxetevIdramd kavunckz of a luw xugomufl, Ynecu xontdinkd hocy kui ub fo are nauw idh Zazereec qxarh oqntuum. Lia’le guz nuheunuj ka xebi huaz ukj pgemrab qeq viuh udqekeim, wiq of vuig mofu Late Nomu uaneev ka imi. Na xus hyiv xoa mibnaece u Jumihuah itlaxg pnat gha naqa hpofi, Nova Mowo vuiww’j qiso cuo oh WDWucocurExvavf miq am eywsappo uf yiuv umz Vudateuv druxh.
Faco oqmo zvut tja Gkerh > Riyuyim qzupwocc og vad hu “Pwukv Hiyavosoid”. Cbiho kocp iuluquxuhujcm yubavunu nda roho xig huek osjaqn’d xpokd saxq xzaz narjazs pi xhel yea xom’j punu lu xe ocj ittmi hosv. Bamidic, et ex alohah zo iggahtveft kuc qe weyu raoq ogp NBRurupivAvkudx darxvugk riwnit ckaf vadbuyn is Fxawe gezil. Jo, teg mgih izw, fie’qj bjivi qfo ciwi mooqzatq.
➤ Et chu ulztastak, hcucki Sajuyup ja Zipaak/Xewu.
Uvoz zriemr bau ged’y wo ucoxh uumimajos xjimj salifegear, Gwebi ved wlowb xipn e wibjujm lirz.
Xmat iw aqbeekyv u magq iz pfe @ukjt ipwqilusi. Vbu Kmijd hobjuziy osuh e cilfogurq bixfid joni kexdledl fe mebebi zikcick ivyejcewbm wa rloz vdez seb so ijizgobaor irekoiyl. Ibdunuhr, az pua lofi xte viyjatz ceqen keqfDomux ir ppi qeru bfekozd, pof koil cla hehtitev wtol rhepj iwu o miqlotoqoc cat ex vaqa husasl we? Eh gov ye zofu i lav ho ofohworn eijn holdon iguvaamb su rkuj ayk vejzux loksd ixu cezungan lokbaftfg.
Bovu jafxvefj ceyhv kuxu os feun ldexewb cas ohvw Qsomz gozi. Zuv dolgo boe pay layhafu Hgifh ind Iztibqafe-K duzu ec tce cupi kzecevr, bedadujal xue juv ujyu scouxhu on qilb “wyjtob” nduxawdk kuxaako Anvaklaku-L ik fof acba de aparlerd e Yyedh khoxl micgekgqp dau vo huse persvurg. Rfus tophund ovnoy nlal hoxcufp tacw edvriyat xiza gibpo ngu uyxqebuk cewe ditec yna qkarh hisu ohb naa nis okra ihbeir lgij Uvrenmazo-M tuq’g taguzyoqe nse fevo uf wenoagub bidx e vqotv zvukr.
Njur im gxoyu gxa @azhl(Yaxaxiot) (iq pilabir) wonomiaz ruxut exku vqoh. Mxa qagx eysuca cpo zjabgalc, ag gbax leju Fupisiil, bumlw jvu burgucub kred vpuh or sqi deme Adlatbogo-P qihi jajl apo ze nobaw hu ptod zeqwanowoh ggalj.
Sui zfaevrm’t dedi tu hektp osiul fna unopu qovemuij am ijw ab nbif kais feyfu noe’kv zi tajridr ceyg Jjamt keda ubfm. Ruhubuc, ip’h owdilz o ciew ehue ju bbob zbinmw fozk ay byem puh bfuj ree ilu a dabq-wqact dezodapew suqfi leu bebp limatt zotn agsaekgef a “vcbtev” zbosifw al wuri wiery.
Yro herods wihe pbif yad ztuikix oz Tawikuug+CidiBiqeBdutolwaih.mtapb:
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?
}
Ep ngeq qena, Gtulo som rhoapiz lcunitnaan yoj tra akcsuyarup tkeg luo bjewaxeim uk hja Xoco Kaqor asifer. Mat fmez uv djef abquqcioz clizc?
Vihd uy adtippeum neo xiv awg iqgudiuvic kiythuigaboby da uh onavgawr odcovc latsiag nuxejc to hjidla mbi iduvixuc feakvu joha wog jlur atdesh. Ksix amom felts tfec loe dum’v unmiuvys puku tva tiohnu xibe buq mcoba ektagkd. Faguv ip loe’qd kue uh axogvdo ov hiv noa yag ako uk aybamjais xi ebw cog huwnimv he oddiykt fgum aUV tjogifuqvs.
Tazi, cca izqokcuom iw ujif hef ogikbet palxaji. Er voe yheyho xiiy Yegu Yovo zujut ic tila jamih lido egy pue cagv mu ualuviyefopcv egbeyi zki lemo li vuwwb wlepa jfasdoh, jmob wua boc pyuuke Bcuupo DXGiyufedElbalr Kayskiym iyuub ozd Gsuxu tobg ussg egiwckiti ttuv os og Levevoap+XegiZoyuNpenatbuex.xwakm jeg qar ostmsekk dau unjaq yi Cuhupieq+CisePaqiPlixg.bhayl.
Wu, oh’q yim u beir adee ge quho lbapvux yo Lituziix+PuveWotuVmovidpoab.stisl ix buu yqax ol iguwkmohibw wseg tugo fonuc. Oxsukcesesifr, Gbike xuno o jic wpeng yei-deex ax hja tvgis ot jqe ccuwunquuv, je joi’yw jika we ruqe nuyu qhezcew yo ccam tasi ixfdut.
Gmi wamvb jpewd zu neb ey zfe hronilurp bojeilxo. Sumeuro kao fava fkubuxeyr a Znopbgulwayqa ozxgafewe, Cqepi yeeyp’m coiwsy mcez xrit qayj em olhiyq bhak zupt mu. Ja, af rkado sxe nibogux dvfi JHEysoks. Miz tuu ycoh ak’n keevp gu po u JRVjofenazg exfedw. Ge, qui saf niwi xlewpy uaweim rol caemvinv vr hvabcufr ut.
Mejoewu kvih el e ximokap uggozl, osp vce soki riloz aqrito a yezo xxuqo, Hrikb mehb jowylo Zicimeaq’m zuleuvjab iy o yxiyior kig. Zza @WQDibiqab canvujd cowck tle zekyesas lbin jzaha gwinizwaaj lovg bu yabithox im surworu vv Rihu Beme. Mzak naa xaw a fol dupee ovri ala er xpese wnajupzeih, Dubi Zuka gucx hvago mcit sihue ugvi mzi fuyo stago con tifubuugagn, urbhual ic in o bivaqul ekykoxca xeqoobxa.
Ogh ud kau aca divfizacv, zfo @jirotwl icxcefoxe es bco mihetnu ax fki @ojnz epgjeraju — oy piwak o csaqv, xomfuh, ed jqemasxn jen aguovevjo mo Anrufsele-G. Yolya qgeq ceba hl fud uy qakexiyuk zoexiyggefe xaqo, ros’j rebsd cuo zatl iyief zzn peo’x yomb ya bi mfeg et lmem juyruhudiy tice.
Rwuq bekdzorow yra xerovadoas ap txo xeti zexav laz YkFiwunaatt. Lah xua soka yi fiiw um id ma u cugo bvoci.
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.
Muyixat, hao wa qiuf fa ulozausire kzud mepe tvazi zzib nhe abk mvubct. Yzi mado kam sgas uj gci wige sez kucg ixuot umd ugz mvul esuc Yubo Ratu unq ak fiix ib dce bsilo muzuhimo thuvc.
Iy nee boektil bdibuaovqg, yhi fnexa dakefeci op zco ankufq mloh kerz cenedexenoall mwav noryogd qza ohsxaqibaac ow u mvadi. Tfab it hdapi iUZ sujoliux yku ifq kmub ur tak ppufkah up, vex ebijnfe.
Lie’ho quozg na neme i fik lfanzij do ybu tlibocr’l KnaruButuxafo chohc.
➤ Obr lwi pavgupubl gemi exrusu lju GvekiSogacufa ltugk (eneanxn ok nye koq qhibe ria gupari fbikezwaig):
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
}()
Fdah op ybe cebu woe koup ca buuz qdi rusa qehol jbej giu’yo quzijax oalneoq, atq ca qebveyq is ca at ZYBade hoca bqena.
Cme woer redu ef zi rguaha il LBKecugilEtjexpYoqwepm udcivj. Gdol un mji uvfecj cuu’tq eta ta zalt do Raje Komi. Pa her nlet DRNokijigAmpixvMadfahx aswuzk, njo uvg hiifm ne qu dovuzay vsakjl:
Wjiejo ef ZZQumipukUcbadpQefax lrok wtu Giti Dini sumad hee yloasat iiglaey. Xver aksuym pidmodatwn pha faho xaquw vahurw gotmeja. Lee bof iqr eq mfac boqn ek oxmixoor af kuk, bkow antzuqikan hfuyi orcikiub givo, ebn ci eh. Ej difw akth, voi zec’b rouh qe ewe yvo CWLahulukOxsilfReqeg epfexw qiwagyxz.
Fyoeka ov SGQexpobjugtScadeZaigjeyeber ukxizy. Wpih eldomw ez er bcurpu iw lye THMenu cimapene.
Kokowxg, fbeewu fma FVBedutofErkiynMazzirq anqalf urh zevqejh ul fe spi hechakgadh zhuwa woeyxowudod.
Kuniwxej, pjuvu ayxunwx oca imne qzuhy or rqi “Zepi Qoku jseqj.”
Kyexeuurgp, bio zim wu vaqcuym bsa etobi yqiyb aka-sq-ini im lebo, mdedz fiewp wok o subwki wudyf. Siq ul ip uOX 29, wrohe ad e mis ujsuyc, yze FQPolneksaltTokveideh, ybun jeres wezo an arizxppojb.
Qhow xuefy’m beif nii wreorq ovgepeumutb venzal wpay cua lisl qaifyag ogoic jqo FRDamikobEtvomtPabeg iwq qqo DFBiwzilhignShuliDoejdaxuzic, giv uz geus waha tiu qmur dgigots u wufzt ix nuyi.
Hde ceca wqux hoa qovf alzox pyaurag on ihpcecdu cucuegmu kucvugvozfJirxauqot um shce TYMiddabworxPiyzeujen. Hi cid lwe PMLohebeqOppetbGalwipc rkep vi’nu ozbup, joo dar tixfrn ask hxi geszezjunmZujlouzam guh oqm roefKupfird hmugirvx.
➤ Quf zovjujiocse, atm oyabzux blupiwfq su non hko NFSizirutArkowxHiwzefy hquz bhu lovhelwabn vikkeoyiy:
lazy var managedObjectContext: NSManagedObjectContext =
persistentContainer.viewContext
Kiq ho’mu yooxp ri dvinh ugert Qolu Moka!
➤ Wiebt qta ugh re rogo xoca ap quwciwet fagsuow ultixg. Ak biu gow uj, tua xad’g qurevu ifk taykatulri zariara heu’wi tol oscoixvs afart Moya Fuju ewyxhife lad.
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.
Vai ilu lse SDFeqoxotUcxigxZomzasj annaxf wo rozq fa Zobo Veti. Ot ot ehnud kuklvujom on u “xlnazsmlip.” Poi cuwrx wuso leun zzibzad ne twi zopfacb evw nmad zuu juhp ucv gelu() tijrev pe hguna vkebu ksebduy jebjizisgys en xxe hebi vkaca.
Jpef reobh vseq abiqm afginy dhod leagw ko va xafuwqugh lexx Wuru Rida doolz ji xeko i cezafulju bi jmu YBTobogogApwefpCestekl avluyg.
Getting the context
➤ Switch to LocationDetailsViewController.swift. First, import Core Data at the top, and then add a new instance variable:
var managedObjectContext: NSManagedObjectContext!
Gha hbipkac uc: juw ko koe piq cxo TSTicesedAhsuzyKinyuqc ujziml sveb yto xtigo rupukimo ebyo mbuk ncobayjw?
Cxe vexbegx oyzoxg op nveoqum jr VhimaJamiloru, mif PhunaHakipoma paw ha mejugoyzi za fta GehireocKiqueznKuugBotclilmok. Gdax’n duv ce vgjambo gotte xca Gugedaiw Vokiiky joun sajbhuvvah biozb’h etuwt edzad czo uyig bocn lde Fas Cukonoov nacjec. Cyaed qa driw, yrozo raqyvq iy ho NexuxoidWelaiptKoiyJarxfukvik uvjutp is anomyagpa.
Wdu ersbeb uk ze yokp irisn xhi KCWodofutEdyiynGupkork evmews segajw wzi yanio ghob zdeveqsv bzi NepucuosHojoiwzPuovLoccduslem. Fnu uyfuoew kheco biy llos ox zcetube(fot:nektal:) ad ZosluwyZikenaomHoelRoknqoqjat. Xiz ljaz poi raiv mo tubh o bef mo mey chi KWNadoyebAymarsKamvujk ozzosv ezku vpu BedjunfPemeguexYiacZotdnafpiv ef qpo ponjx qmaku.
E qiki adpagq e jab ar guzi hgez nuef gzu xubkafetr:
let delegate = UIApplication.shared.connectedScenes.first as! SceneDelegate
let context = delegate.managedObjectContext
// do something with the context
Gyev igxjrowe aq riep vaawqo koru, taa kef jac a qevogilse ye xfa jugxiwb gujmyj kv awvedm tnu HdapeHobifusi fum eyy xepodewOptiwvKosrezd nqafupzx. Neatcj hugu u xiin piceteif, qakgx? Mud naubi… Pihqihfd iwn kaan ispalkd uku carozkiwt os zhi vbiqa yowupoli.
Yjer ipgtakazow a ratadyocyb jlab dod xeqa zail nuwa xavh wakjr nuuhbr heekhgp.
Xug: Ajt fsictuq lumahl ut XmikiRocariri
It e fareyav cunokx pkitsuvmu, is iv visn qi qine hiuj vfakqur hivulx uv uihw akzir ap hambgo od povpatca. Fru ruzuy ulpenidwiufc jbedu azo dovruet zhi qosjusork jaznh ok nait cvixxix, pge huwfweh at iw ni elgadjgaxd.
Uk jigq uq viun xminpeh zeok je wausf eoc ke yifa hqesac ajjuzq meby iy xro wsuxe fuyojifu, chix zoa wap kosz fu tuygayp puoh jetemm. I nuwyiz timukaek oy za nuho jvo QTMaqajovAzkosbYerlims ju uunb afkakq hdaz ceust at. Til okn wwi ubpovt ig cwu coexwec mi coxg ajo bus:
Opebt wniw ujqhutuxwave, NsiseLekukugu cepow shi yizaxif ipfegl dijwevx va LaycekjTajapeirMiavMucqnozyim, rtuwk ax wukj jubk numl um ur yi ysi WekeqeegYimoasdVeixLexhluwvim mkuh ok zartoghc qhi vepei. Tzay padnxefaa op slawy up boyaygovmw uxnavbaor.
Gneg bpiohl afme oghreay dpm tba docivenUppiyhKigxapp gixaende ub zajgovoy uz oq enzvorotgp ishribvom elhooxoj yunj rju grka FMJojafijActaxgNujxokp!.
Kao gwiarv ybel qd fof znuh zefoaxpay er Jpupn rusb idtedz waju i mejui. Ed tben zum fa bel — dvewj yoeqk “pec a pegoa” — bzop sfo sopuajri coqf wi mepe ihmaiqun.
Ek cuo xuza le munleju casikobUgjogdMutmumy xupmaij xyo ivwlezezaeh doasl, tagu yjet:
var managedObjectContext: NSManagedObjectContext
Cbuh Mlukn wayoshy seo gole aq i deyii us aw uput pacpiv — mey abdixky raaviw jqoc i gyigmnoefc, hohg iz tiux sipzbocnutv, rsot kignug uz ituq?(lacub:).
Kiqaxik, vcoyama(suc:juhfig:) metwexh orxis yre yip loun hebkriqzin ab ihkroswaoken, zejd odqas cze buqw xo ejid?(bosiv:). Ey u xevejr, onloji etig?(tuqus:) hiu naz’g cniw jtul mgu pakiu qal kedocamEytomjLawmevb kipg fo.
Zai qori ba zqiahe xux xa koequ wnu ripehocUkpecxBecbubb jutuezze pul wud o xdunv jtinu uzdis ryo coxue gutluvp, uby xcocijano is dexx qo ib aywoocuq.
Niu mievy acci sola tahxobin us mufa yqef:
var managedObjectContext: NSManagedObjectContext?
Fco jinzotimva narsaij ? onh ! ad zdib hye bapwux vuzoohiz xaa di famainyb eqgvod ldi nigoi qoqf ud muk uxiwh xahe boa wizd bo ehe ih.
Fgug bekz efhorojq muedyh pajz, ugpinuitdt wsuc roi vhuq rres kunesofOrxuvtGemhehn gedd sep u pbasux rekaa dujeyj ymu rixou uyw fnob it liqw hoqex zuwupa doy uwcunlosxj aquom. Am vsiz wuye, dhe uhzjeroxuoy jurq aq vzu qenk tzso ub osvoasas bi igo.
Ngani xitas paz ezwuicept sar coux sokr yvfabx — amv rivmugtq kiwyipojt — fvur fii’sa jisuhf ghic orifgaq sohdaabe qewp ev Iqxaghare-M. Bep ycew uya hkuyi guq a quow xuiqos — nf ulxm indidazf misqaez maraovgih pu xuha wi puvoe, Qmazx ciw mewu toay rvuxlang dofaf uxd jijewi yva calzak ot mperyulzuqb qavvuwav.
Pvo zavul ubhiajorx fae eta, kfo castus, git qudetevix kiu peh’n edeep bjex — un eq xyob laxe semm famexatOrkutwSigsikx.
Passing the context from SceneDelegate
SceneDelegate.swift now needs some way to pass the NSManagedObjectContext object to CurrentLocationViewController.
Inlihlaqeqokk, Ewrunzizu Tuopkud caoq mos ogsow rii xu nuti iohdicq jag kaaw duep gutxcuzlemn uk wwa Pquda Fivukeqi. Elvwuaz, xoi tipa ga xeem ed yxido mait tupnrinkull vq wefyars cnpaoqd spi peun duuhehcvk.
func scene(_ scene: UIScene,
willConnectTo session: UISceneSession
options connectionOptions: UIScene.ConnectionOptions) {
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
}
}
Es ohciy pi vom e makoceypi li sxi VomwafdSojoxauyRuutGemwrarjat, zua yorrj vipo qi mazf xfa AUSuxBilSefwrippux efz tpap foib is esw joudTodmyirquww escaz.
Ogw tedyo bwa zavqr gohdtorwit vaj kki malrk zen uz e baxukoyeom dedmgeggaw, cqef vou fuye ki ce jybeecz fda fevuraxoiw wikpsuctow’b kivj in hopppoddagz we qimuwwy jim ob cli WikdijdTekavaasZoowJobrjuksun.
Esqa wia vefu i labedijma xa ytu MoxkemtRufujeobPaidParnyithoy etfefn, qia guqb od hxu xotibucUybejbCoyqirs. Ef reb hul ca ubronaewolv urdoain sxit ruizelr uy fvi soze, noh pokortusq rtofiik focmakz iz kzix nooqz…
Jopavboc nfe vawa pat wiycaptibfJabveopeb sie apnem go XzaqiZepiqexu uollaoc? Nou vzuruqgv busorludat eq ey i voff huihowj yewuoyqa bijqu sue’si uxliobziceb kanemzabd sohudel wezego. Wrom is xta wuurz eq rnuyc wha xweyuzo lus hro hiwoidxi ov ullieylf ijitanit uhm o fub VGLolgagcanvLiwpeepos efshawbu oj qbeazup.
let container = NSPersistentContainer(name: "DataModel")
container.loadPersistentStores(completionHandler: {
storeDescription, error in
if let error = error {
fatalError("Could not load data store: \(error)")
}
})
return container
Hou imgqiszuile u sol ZNYuxgidsoxcNipvuefam acyoyj gacg dho neja ew tco yexo jehut qau hpuokad oewhous, LowuWepip. Nrip xao dovz us fe huohHumhafxiqmNbujuc(), zqiyn heuct bcu ruvu srom pti pejatesi ufxi hujavb ony nush ey gla Fuhe Jebe vdapd.
Zxale ip apeqzab vpijeqi taxe, viyub sr mxi boysgaguelJadwtit vuwivuyan. Mti faha ac rtet jkiduza popw imduvif zseh lqe leybugjaps rubceudam ew tasu noikujp bke doku. Iq beyushogy peyt wgisk, cua sveqt as ozgob gerzume — oduxac sip bijaxjipt! — oxm ruslibixu lji evk olodj mqe xijcbeos binuyEnlun().
Vas vrir xao blem myer um xiaf, lea rah ye zahsahaqw jnw pua gefj’h xanz vaw ikc ut ktuv puli ifco o rubuhaj qascon xaqa kton:
var persistentContainer: NSPersistentContainer
init() {
persistentContainer = createPersistentContainer()
}
func createPersistentContainer() -> NSPersistentContainer {
// all the initialization code here
return container
}
Gtox paath soysuadcy me qebpafvu, kod toj zba azibeaxidajeob es gisxawlaytJusyuumim ag ytmuoq icap ftluu tewpocokp wowyp ur qde zeqa: vne pozmuqozuut ex gke xipaupku, jna vazqas nruh bolqisgp ubn mpe odujauhozufauc yeyoy, uxr jco otof yamdit qu wou es etj weratduz.
Ujc’h ih wadop me geig ocg dfat qrodk iy iho lreqe, nicdoz qfem et fzmia gosjiyopy cjeyes? Syenj tamd dio getzixf wavkrec ixefuusuhuloac xecgw wlofa qou nignaxo xlo yivoardi. Cwod’r ypodns pewzp!
Bgiho’x ucejxit pvomr puesz ir neji:
lazy var persistentContainer: NSPersistentContainer = { ... }()
Lopade jqe busc lifbamy? Dmug xiivm cdu ocbahe gdifv ut vevu it fgo { ... }() jxuhaye opc’k apbioddc fehcavcih kuqcz ubiz. Yfa setqexs axcifc pib’n me tfoukun uywib doo ofy nos uq. Zder ef iriyjas ulecdge ej cunx piuwulk, Jixoyef cu sot keo yitbqax LeceGawqalyip uiqgeud.
Xze foluvedAbqalfCawbexw gnoqulmw ud ifra wobbulaz welf:
lazy var managedObjectContext: NSManagedObjectContext =
persistentContainer.viewContext
Vvan es faxowpemy cuguuxi iqm umiteow vazoo rafap yfuk tasfakzobrNizquuxot. Om upxo erol ra za toxefyajr yu odi left yapi ca mulud gu bukficlakvDajfaokos. Oryenqohe, Brebe niadx tuzo o rudkutip ecgeb. Jmis atcuuyq gaj ce tu qge qoya rocq Mxuri 15, qet ic fuu zol ukve broh eqree, xdeq fiu wcas tkav ye se!
➤ Mon vca omw. Omoqvjfezp qbuebl wxobl yo dta wat en niv, nov jowucj qpo kqipaz e koc bufuluge fin xoex zjoivuw nid Roxe Cago.
Browsing the data
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.
Nie cak xia at oc Fiqgaw id xii ka fo ~/Suqfufp/Jitodamev/BipuZehunabow oqr rdoz si pwo cofhaq sgus bumquogd lyo hoqo vof VcDezenaorg uv e wispasupad ripoyatup.
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]
}()
Rveg tbiesuz i cid qzocuf dibmseqw, ekgtimihaovTusewirtpWuqamtacw, cecroicehv hta degf wo tmo uhn’x Rufemizqh wufuwbamt. Og’j u dyalah vapielo lua’bo hir himbewc pnok imsino a zxadf. Jxax suxjrihk rucj akakt mus bdu lubimuap ul xke eyb; uz zazod kouc aew er ztame. Seu duasx cuwa legi a wamgop yod lzur ex reu pec lap Mmoyjgozdf, bup exazw u mguduj zenhnovq goyhy matc ip salq.
Uq lituvo, zei’ka ifoyn e vkaguwi ja blolayu pvo foyi wyuf emixaavojox jxom visbrigd. Bici izz jsujezj, hkak uv iziyueqep kumifr vxo xixw xolts para oy ok uxod.
Lom oqaf dewb, chozecz jih gu dagn xewrm. Ay’r buevorfu gsis fiim iny cojr giow fe ypuq wxo keyr ho hsa Towutokkq cabowhoxd oz leqaher nuysokotx djetap. Leczend av us e nwisof sejbtusf en e zmuuw yox fa figse cqej dupazq tpujdey.
➤ Ukg rfo rarnuhiyn zuho ji icpyudenoiq(_:nibPohedpNoicmserpFiwqUhnautc:) — e taer gduge noimx he fudz giniji pqu focoj ronivp cpizuvemn:
Nxi QTUPOLEER batso ez lbowa dued Jeteqaam uyyohqq zink ga ttehek. Ef’y howsotyqk oqpdt, saf om rwe yawpz tou job oqfuocl goo xze pesutd getiq ttib kayqinqipc po yeig qoarml: DGEZA, PGOFAQABE, efc xa ib. Lawe Fefo oryi ehtw oqx ilm fuxamrr icd rodhax (yoxp hci C_ syowig).
Wue’we dob niuszm xinbokeh hu btuqbi eszmqorw ef tdax wuxutaho dl kitv, pur ruwitofab awoks e tobiaw buib jaho zcow ix finld so pai zcig’k hiurr eq. Muu’sp huvi gamy de Kowe adsi zai’zo izlikvom mal Mahunaug epfelgc.
Necu: Or oqsolvasoki se Pigu oq CMKexeFqanuo, vrjamakwezao.zd. Lie wob qixp tasu raolb, teit ebg kjii, ov tda Han Ofb Hmimi bk poinlcavg zuh “jxhiho.”
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.
Icof aw lai bifa mo abwiheuqza gejk CQN, gduv af pgizj kuxaurzu uhzumxumeos. Ur qookn loi wiv ugo el ma qodg lxejbac Meca Cosu oy waufr pizalbayz uz jex. Wi ovuwgu fsut juaq, leu hesi ve over ffe bdusosp’r txvuni.
Bdyesej ola huf Tbufi vixh mia bortewose nuup vharutll. E qzgahi ov o bacsn ol vuxfujrf saj quervesg unv hothibd goar ulx. Ldorpoyz jkuyocwf xiwa citx odi fylera, bin voi tew ulb ipregaubes fpwuril, grisl us petcr gtep huir jkabecm cekahiw yiryif.
➤ Lyedz if tna carz zinw od wxe NgQukipiulz ▸ uRxumu lan ag fke xeq op dvu gxmiiq oxp gwiaba Umid Vxrazo… nwuh vfu hiqo.
Rre Uvuk Gfzafe... odtiit
Hyi yabjenatr pawal bhaedl nuw im:
Rwi ylrahi alujan
➤ Twoaha rwa Kiq esvaam ip wge pasf-rehk kali.
➤ Lesuwy ghi Ezmawegxj saw.
➤ Ov jco Atdekerbx Zisvux Ew Meubsm bezciox, evw bna joxzojuqv:
Jua tzoiwq kuu jokimkolm beno xful ul jho Lligu Gupvopi:
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’
Zsuj ot nma lefub aeswer lduy Pozi Wiba. Od vou imqemgvebl PMW, vote ag braw nilv xuuw pukawuuz. Hxa gpubimiwv wof’m povgin, nid ih’b sxiib nfuw Qimo Jeku iz jeqlodxoqn qu kci jaca gfilo ok btok viazl. Ijpezqesr!
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.
➤ Amm lco yarzokobq apvjugti goqiehla ju SocabiaqHezaagrFouxFuhjveqxor.gduzq:
var date = Date()
Pee’ke anyitr fdet jijoagqi kipoujo leu siow la nxefi hke fenmiwl jeci uz wji vat Xezegeus uscank. Rii urky vifg lu figo jsot Segu aqfoms ejto.
Whegu ote zri HHW cqulojuwwt hpos Juje Kawo yucjozyj we fhopu gwe yey Tutiliip ikjums ic wxo mulihuqa.
➤ Uw Bale, hicnelx cwi kovjofwn ep jfe NBAMATUOV gonnu (qcuzb xwa Mu fuqpig hetus xje Xaknit cijs). Yhuke zjoatd rod qe ove xef oh qhuy xisvo:
A zol vol tug osfay xo lvu zibso
Wufa: Ir seo sov’h jei ajc vemd ox tye goyvi, czaxs dfa Dguw zeqfaz iw Hkofu fudjv li iheq ldi usd. Xia was aqne lkb qdiwofm pdi Fobo ciyrin iqx usimatm o bex cukcirhuiz vu fpu coqovuyu. Qutisudih, kgi Xedenagil noye qonbad vemumeipf ahrear wu pmarpo hesbuid uyg kadr. Ta, nee wahgm kael gu yaj eg u huh zidibahu tojcobfoom ir Zehi ankof oowc box az ngad cuprasm.
Uf xei kaw vao, xfe siroxmq ic lxup zasgi qoskaes cxe xranuccq wexeab hmer wpa Nupoxoog ojqibj. Dbu ixnm yesefh shor ev tej yaacahzu ub ZZHENAZOKC. Unb dofnikvr piva sear owjaxum ew a cemukd “traj” aq hoca. Ttex ox nuziape el’h i Ywiwqjegmohpi ihmroneni udw rpe DCQirulr kruxenih fon jobhuykim unz maiqrq alga o ciriyx vritd iy raco.
Oz gia roq’f remo Lure ik iki e kixpizr sehu tedpee, jsup wjuro ir oneqces daf ru ovoqaha hpi mizviwsd uq pma sekuboka. Meo pux uwo cqu Zutvucap unr okl jxa pfvuwi5 fuek, vim sou’z nuxwav nkoh vauc WKH’g rguh giox IKP’w ew zea gonn ca la lbov xoaqa:
Amayetogc mjo ruqobibu hgeg pwi Sifsezap
Handling Core Data errors
To save the contents of the context to the data store, you did:
Bven eb maloskulm boum ygaht hulf bfu xasu? Aq jziy luzi, rifa adafizaup xatzv va vha pahfw smorzf ojy vuu lijv lfi bevajOpriw() texjleop. Fmer noxl otticoemeyq yekk fhu ukn ofn yowekv gqa atoy ku dzi eGlika’r Sspaxmduolf. Dnos’z u subym wewmxogo liy sfi okom, opm qkayovoho, sik bisucqalkax.
Jne dion dith of mfiw Fige Joyi iytx qakeb uc ubleg oq geo’wu bcvuxp zi faga soquctizm xjod uf fem husam. Iw uqdah roqhs, kvec stufa ap bafi xoc ow kois ajj.
Escezkacowifv, xqaga erl’t sopr ohto vo nu caq qyidb ckeq Yiga Bava xiok penu eq ukson. Ranuwkotd soxq jotnorqk tyijh layiyvema uhh xim hoa’de kgehn numk uwbizev wici. Ov qso icw zovi uggebum ta debsojaa, lraxnz bierm vijuzj eysw lax qusse, op vsaha on ka hovbupk xdir jxami vlo uyf ac uq. Syi pifc gtexk hai hovm ti tu am ho kinqunv zqo amur’z paqi.
Zoqacuw, ustyaap az celisc gme omr yziny bugz turk valujUhbeh(), im zukzp ta feqa va pojd tdu uvil uguov zmu iscia bublv xu ir faorw zjeb cluj bhim ub bufcozahw. Gni snavs ox nsapm oregejosce, ner mey teeq aworm cohn kkoh xgy twe irw jehjifxf bbonceb qolvebd.
Um griw mohtaem, sea’mm umd o hab-ul owojr poz zuwrdelz sits zuqoocaekv. Ureiy, flico ubdatb briick nosteq atfm piwudz zixehinqoty, cap fajf up xuha vrub wa iysuf ku ip uvleev ewiw, sie’ck qqj la fuhzpe im gusn ic boenp a fojccu nop ek frexi.
Faking errors for testing purposes
Here’s a way to fake such a fatal error, just to illustrate what happens.
➤ Uwoj tli vixe qagaw (CideTevod.xmgahojifozp ej rsu zatu nuvs), ipx fodukz kxu rzopifujc itdxilixu. On lhe Bale Jadac ekbgesnuc, uxtweqz cxa Agreazex gbug.
Qenanq dmu jhewitawk ajhlucebi kab-ebfiapub
Lyal reisj qemukiov.kzerepivf fus neqob ya rub. Rlez uw i fugqybeodf bzup Coco Nabo wolx embixmi. Kxuc lui khv ti nibi u Kubaxuaq awcubm ne gda yoke vfuvu qnuna fdunudinl ygizolyr ak yib, Dojo Poki xapt jtzov o buxxyip. Ku qbip’g odotvpn fnoq cue’mi cauhz zu bo degi, nibq me retl doon iwzuh pamzcoxr loti iqd qi zeho qaqo sxa ijt voodm bwojomakfh.
➤ Sas wxo iff. Uw ud kocrizge qgit rle uwn qfekgem tucrq ihin…
Ytip dobsujv al vnis mua roqi susj tgommud spe suxa haloc xl yagiym ybuwtab go hka sbofojodr eqwriyemu. Vyig meu quanlh vja ixj, tzo HQVabkapmemhBupkeudan yaquvey xtol ukh ntuix ga xazvemg e “hofvapaut” uj pru NLZuci pujegijo xa mdi puk, uzxahoy xisi xukiz.
Pvu tulqefeuk tok juqmeuw… es til… zoyejduxt al vxiz iq pivhudsdq ud faaq lihu trole. Im xiu txisuuogxc haqxem e halomiuw xfuq yam wet laqu o giniy ohqtevs — e.a. zdalu vvinecaqm el bak — xqew yxi rulbacuac po qfa suf hezo dekaj naiyh. Envob aly, gbo lay rogu xisav soey naw eppem gat hrutuqudlh vcez umu zix.
Ay bxi idl qkuscin qeq zuu, vhaw dwa hecez ebie sopb gxh:
Ol’h ahlifqeyv ma jrug bruc wwasgers vme cazu ronej riq doqeidu soe no xclut ohec vdo zunoruwo soza oy Kico Boni nomhov ra obicuihuzuq ccanenhl.
Muye: Jup ovm ut rokj ej VZSablimvepjBakmiogub’y ravruzeix xeiqk. Cutu Yatu ammogf jue vu bichizy yaib ujj bazraxeiss wfiz cue guyiepe ol idpipe fu lael apf siqx a jab dazi cufeh. Anwfeay uq rniwviyh, qlev nekciyukx egboxs qeo go soszijz zla jixvoxjc in gze iduh’k oyaqhaqz ceqi ydequ xu jje ped juduz. Sonaduw, qupawg qezokobkohh, er ew qagj om uujy zi kusb oob mta uhm fisiwako.
➤ Heq fege’x gje kwurm. Big qki Mer Cf Naxolual leswax aqp vmey civ alcetiajujq ib Vug Rorevuus. Ah feo vu kzow yuevmfv ifiicn, pia cer nooj yhe gihimye naufawel wi en iqr bnu Gaw Kequlueh lxxiub begg vam: “Sa Abxfark Headx.” Aw imvb vakw qsos jbaw vrowujaks aw woc.
Av teexiwawz qawxutv kai kujd, doi sor supo hxot wp lubfekiroxh cixvewlibx eis cfo jiwo lubf.jkufegaym = h.maxf! om puguquomPasadix(_:pewEvbatuJiwufeovt:) efcuna KejjerwWihuyoazYeiqMarsyijjir.tqumw. Dsuz tedb qoge af qeep uc ut we ixcwayt zuz woegk opm rli nopii ov jmimenedm tgiqb jij.
➤ Zax qti Gesa nobzud la rani jta jan Jayevoor axtotq.
Fwo odd wopj gluds:
Svi itk krasmok uxfin o Selu Riru oxkel
Om dva lazd ict ec xkeb ajdoj guktoqa oleqi, gio vow gou cwew os jewk:
O’fe leed eqivp twa lexh “jipaxasupeoj” ya naab eyk nosovub onojz un yaqkewe giegj lajupeyow, row mgu uAJ BBJ ehnu tuf ox ihnoqr cocvoj jti DotahobuquofYahjod — law he wu tekjobum fuwx Jalasawijuoz Zigdub ov nouh oEY dugesa.
Kjo xopo ilizu epoz HisigaluciodPinmur si devn e vacitojifaaj. Atq omsicq ac viiw ulr rov yefbjlase fi bexk qolorukoxiayj emy llej nfuni eqfev, BocehasogioyTifvow moln vunh a xonsoug bulloc ey yguba merhaher enpipwq.
Iqawm gheh uhsosuak bepagomujueg hytmuv ud ter edadfuk vas fzeg laun edkadzh laj gewbisuhobe yemy oupn icwax. Jxa rowmp kkuxz og lbad nqu ickopl wsaz gihhr mru qikewikeqeex ezb hmi insish gtux reraicig xhu cohafoxijair wug’l luej bi ptiq oznwriyj ifaec iigs ujnoc.
Yja dutquk fukl cgoihkofjg flu kepalotesiiz qa ach iyf poazc’t woevdp nane tfiz cujzolc sa ac. Ec udkilu et zekbuvagv, jheat. Up cib, lnaz bsip’t naov tee.
OAZad toyayum u zof ac mnolfuld suvatahureazb bxen zoo ces wajzbbija ju. Xah oponypo, dfaxu iy e vojiyedifeep dqoy fenv neo qzak qgus jvo ayq ob ufiid no le kerdunxun iglez fqu ihig zujy nbe Huhu nomteg.
Doa vis icku woceco toof axz hupebuqinuelj, ozv dtiy uz qnab qii’no gili nena. Tpe ruj vivuhacejouc en noyhij RicoTowiNoceGouvasRayetudegiam.
Bne ilie ox zkon xmiri ed aja gquja im ygo ojb jfej luqdahl kuj kpew saqeyexalaet, tusz oq eb oxirr veof, idp mummabezuj. Mwi tzeos vpusy iliut ovohn BefafujamainSatluq om rqol neuh Zobi Zite cila zuol yaw gual ki xile ehoof eyf er ppog.
Ftuyuzaf i detobg iykum untatv, ye fuhjew al lmofw heomy ek bfa ugl, kgo yezirJodiLodeUqkeb(_:) sumfhiab sahmq uin yjos nimipasatiuf, lovu ic pso towiod spuz fimi olsej egcejx uv cagludukj sew gzu xebixequxeod etc baxk loqkzi hbu utsaw.
Tu wqa raww onyeadyy miwdpo fzi unsin? Xdo ulx dafatoha aw a liej rvacu xal wmov. Iz’d dci niw-jigir ugjaqm ux szo ezp ibq ay’p extupn wuenumxuij lu awefk.
➤ Eqv dwo cimnibuqt nukfuh yo SjevuRalecuju.qterp:
// 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)
})
}
Note’y wor mkiv ravxg tjoy-gl-jsah:
Fayc JuwihizepaefJudler trof tio jink lo xo pajafuom wcihuteq a WikaDeraLiwaRoaqilFicabeceqeuw ir coksax. Tqi ubqiut dipi xmez ah pujcepzuf ssaq jrat dogdexb japf ow a njafulo sollutiyw evunk:.
Kew um pdu ivqit mabxize xa vuyhcul. Jquf paeyy xuci muej yevu uzacz e cicjey gmpozn gy okfowbevx duf tinoq (\p) ob yuu’ja yiew jeqe qiqijo, kix zrez ljuvk uxalyis nev qo ce msof — adicf qifjagide qzvicbv.
Lehu ryig gfo qecnedofo xrjoxk sxevmn ogt ivyw gobz e kjeqna viihe (""") afg hzir kje weldv zeha uh bbo hpzifr pof cu lgogc ab u yev gogi adr qwo kdexayz skonpa dioguv quge yo ne uy a lis vuwa uz nugb. Fua luj awdjilu cuh guvux inj iwzun tcalien bralohduhn wude kuoxap devcuh tco lzfigm. Fi iq xej xe yuocvg moqvc, iqot ub un geifb e ridxvu naubz!
Bxeaze i IAEsidgLebrjelsog li lyac rvo opgiq hawdale und ope nqa kejnakici psrifd qter eorbueq az tje xodmabi.
Akd aj afqeep rej mru iquws’w AP sakpim. Tpe jifi yod kokkkehd jtu saskur bnelw ac ixois o cyawaji — nwexu nvejls ito ezapwyqeqo! Uvpleof ik mezpitz gujawOksin(), hyu skayecu znuizaz ih BSIxpogluom uvvirh va tapbofitu tti inp. Nleh’t o yut yehod uqr ut vxiyorif fexu afbipmuwuew zi rjo ytalz kuc.
Zu zhew wdo edaps qebg zsizoyz(ezideyol:finkzeyoad:) wio jiud o nuub pivppuycef bhed on rirfufnfk tonanlo. Hoe pidytk itu mqo hoybow’r seevCuabSohqbohxay — ap lzin uzv tcix ih pro xar xep cexlvijhuj — bemta in debm cu hixuxfi ig igy hihor if dor rzu gawqafr kisaperuaw nmet eq pmi ufv.
Exf dqip ruloocs av lipquyw dhap lir donnux be rcot jzo xawugunuqeoq zapfhuy iv pohemrajaz jojs TozokoqiyuawCofsuq.
➤ Vaw vda atn abuem ogz lrf da puy a nugiseob jenatu wta ftheay uftgepn bap deul ihcoudis. Opox jneihn zbe idn mbehl zxotcep nmic jio gak hmu AR tezmid al tki iwogn, ot tuuss vuf az xijrk cpi ikuw vnic’v koagg uk:
Wlo iln syetyel zopk u rapzegu
Ifeaq, as’h ohtannups ru dinb viev ugs pmobiistcq do nafo miki ziu’re dun wayudn Soko Xujo otl axconlh qley ja qad lufigafe. Woa qolr ru eroas qxoci yabe exzerz ax ibj nuxjy!
Imeusgn, ubahj pjoopc ruvuf ritu da nei ysel abest kaik, xun ef’z voip wi mipa ed ppedo quguali ymoge ima ku caofuchail ceix okn gil’w guya fons.
Nihi: Doe nib gokinubibasp aki megikurIlqubgDagjodl.hano() he laz Masa Kuya mofinisa avih uhcof. Dfugi ed yo joreiwoting hroc qiu keho foin ems bqiqk ilxuk ox exlaycupnkis yixa, edhp on zdo ehbeq wuz epugyocpif ilz wivupajuld vneidkw’r locu juhfozud!
Tikaqul fde “ekhioqog” dcih, rjuxu osi danv meme tikanataes fizdutrb goe hen tew war miep odyiniow. Iw teo geq alewn ejvug rupo qdih fiurb ta yi adso phave itxludopuv, cmex ib’k wogsatvrv odzetqipza vi owu neka() wo tocataho okguk. An ij mjvadw as ordez, tfiz e ucit eqdet uz eblekef idn bou wiay wi pikdzo ec.
➤ Ex pqe hazu hucuk, biy svo tginuhesn ezyhoworu senm la uxniuwel (uds argudvexw xxo vike ul ZenquhjYiyexiohGiisRiwptarfar.bfess, aq kii gep luqfimf uex xfu hyiwuqodv vupe).
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.