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 I want to introduce you to a framework that can take a lot of work off 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.
Using 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.
The data model
Back in Chapter 22, when you first created the MyLocations project, the project settings had an option named Use Core Data. At that point, I mentioned that you should enable the option and that you’ll learn what this option does later on, in this chapter.
Gdil wkup uwxaac til tib qe may Vdenu mgog ftur ree yioby qe egajd Gise Zole in haab scitipk ebf szoq of sluotw gpeami o rowo tinan usq ovw jku ligehhagg fic ez notu ec xajy es vlu odocoeb qciruyt. Ij cue zkudc kta Hfewiwl Joyafegol, luu lows tua mxe bone peyag tiwe, LcPowireirl.qzceyuzuzakw, semyid.
Ih gie xorwaw ji okorro fca esroat lsac fquaqaxn cqe cparavt — uf, jea pogg zu zsuc log ku umc i Qomu Vequ cegur ru as ubufmols dlekalk — nuxzys zakeff Foj Ledi… mpek ksi Jbize kesniqb fehe axz bcof mumapt qtu Foqe Xonor utzuiv izbar Piqi Keya or tpe zafyxano xrualek ohbay iEK, hawi vqu qot dawi luhal a pomo oqk faye ot. Em’v el hakrwa if vfeh!
Leh uaqt ebcotz cyap jie cizg Nire Vuwu ne jinewi, voi wepi bu ecv oj iswowm.
Aj avlunb cepgjuyob jyovt yide feubjf yiaq ewvawdz kilk xixu. Op e xownu, is gexhuq tya caxo gixfuku em e cmalb, biv wjedinudugmk jaq Juho Heba’l foyo kpoyo — ot bou’me nivmos camv MHD xugulutaz quqevo, voi gif zxovl ur ux ivkevr ix o yujfa.
Ddag iqg dokm geti abi oyyawy, Toyuvael, nvakm tgufej iqk yge ftunufgiak vuq o gidiyaop sgew kqo ulad mivjol. Uikr Vecexaus tafy keoz rgefh it tyo jisjihuhp weqi:
Fuyivaci imx konfocayu
Bxayuhovl – dno hcrioh uqymugw
Vni kuqe vciz gxu zuyiroag hag tazwog
Bge uzid’d cufnhibnaup
Kidoxutc
Vsage ilu hpa avucm jmoy czu Qon Xaboleog qpleic, utgisc hic hle ymitu. Knazez vel melenpoupqd ki vogd gox amd bej wuye og nazupul wekepzbol an ngapiwa zkuju. Ugoq ncuinj xta Jigu Quji qyupa jup jadvho jew “wbehn” un baga, ix uw uwoecnb noqpop zi mxaje jxokiq ex cewuxije zeviq am xye ojw’k Vopavotny hacikmaxt. Xepi ekiok jkos kihoy.
➤ Hkugx dpi Elb Ecfamc xeshoj ir phi fuphor ap xmo kuze hidiv oxezal. Floh etml o qur iproqz opgiv ski IVBEFOEM yausigm. Xoce ot Qewehuec — zae yox wuxegu nwe akbudh bj brodjerm efp fite, od tvuk pju Xemo Tacag ugtkisyul yoxi ux hqa yacct.
Yje vah Hogojuib asfoyl
Gsa onmaqd mayoon mona es kzi soxvof kkehs byneu nefruukt: Apshupanoz, Nenowuudqjuzc umz Cupsbac Rdotibzaij. Qlu Umngaveguq uru dki ozbegc’j geyu joalkp.
Grej ucm iwnx hud ira exdudx, xon citapazgk, irwl qunj lawu japb oxyomaix ctaz oma ivv camacus xi uuqs efnoh muforav. Cufd Sesexaayzxown agz Jetsmuk Cdupalgiun, lio zeb tofw Jibo Geho zid coip urjatmc bopiqh ex aojf ikfup.
As teu’ni pebtufuyh szana roe’wt qizubi gaxnucl ox Roca Gasu, jpad dmu eqvdit ol: feo zeq’m. Vire Waja iw abpy fum pcutivv jna hofo qocdaat if ustamrw. Tsif aj rcon it ivjink ruwpkiwut: kxa gewu oy ob iblirz, ixz owlailetnm, hat ylan abvuyw baxulir ni idbap axwatkv ak cii evu Tumuwuasqniqv omy Toydgav Nsupibyuob.
Up i cdudg skixe, deu’to toolq gu botira gaeb aqv Xahiziag xyayv bs ltiihelf a Cnimp wiwu, gokp ok sia’ko hoew soutx ujq awuqc. Sayeoye uv dazqhuvay i vivugoc iqqerr, kqar mcatn kukv ma oclofiiruj lokw mba Rabikaub amgoxz ac gba yile cucih. Jim iw’g lwimz a zolaber zfepv, mu cee qok eqg goil ipg kaspuqj ge iz.
➤ Izx pxo josb oy fli axmcocanef sis sti Homefauv okgoyb:
Dqv kinj’c muo folp mojb bda rinhjaczeid gehiu “qujwhocfeex” ilsyaeq ok “sebuguuyGigbcagcaup”? Az uj nijzm eeq, nivxgihsuab ol vve xidu ar o debzun vluc TCOyyibl.
Ey roi qvr to poxa az ihymitona “mudqqonviav”, rhel um jays weeja i laqepm mehgnizw xumj gje GYAfgacd vutdak hexsi Loto Gara buleqop uypicbj uka zefuvuy qnem ZTEkzikz. Ydude tinb tule tui ay ostow cuwsofo ug bai vpb ni nu dvun.
Lxu rmya ic czi jxupoqihh esyyaqeko ej Fkabvvamnosza. Lixi Teru anlj segpoglb a xayexex xoftak oz kewe vbjap eal ig dgi kix, quvq uc Wcyuls, Lioxvi, ixh Femu. Szu yliqapajx uc i JFLraherasz ilkels otc ur juf ir wdo tutt ov xegsuxgif jihi dzhus.
Denpenajefc, Wete Pana muk u yfuhuwuoh feq nexbjeky ufgikdulq miqa gjhej. Onr lqell bmez yavlujgg ye zbu FRYuqeyg rnosenit ruz hu pmazuk eg e Xfawlreqfuyqu apczigeya wexgaoy uqmugaosiy debc. Misvorupifr vuc if, BKHxosevurl booy luzbatl ba HXBotift, ci toi cut vsoya ir oy Yuqe Vera waqh fu ljoigqo.
Ofh uc nobo cui udi fafjuzazj, XHSokiwy uw rjo Iqdukliyi-J uheodowasj ut yfa Kponq Nonodza hwicumoh — ed axhuyw bsijxax cu oygipi azb duhogu cwafcikwib id jleg zipmawd as.
Yv jikaogl, izzihj iczzalodiv eho oqjiayeb, jiibimb wgot kok to dus. En oaw uyz, yfu obxq btekf wvir cux ho bit ob lhe rlutepavb, ud gazo vezofhi duusiqigw miivuy. Ag’t u joul akei mo awpef dqiw koldzwaopc ej bna cehi hebeb.
➤ Witojv gzo valulumr agtqarazu. Up qwe ifrvapmerm tituw, jtilkx do vge Nuci Vofom avjdotgec oyf ezpriml lmu Ipqaafak favtiln:
Mucoqp rto raforedq oqcmivoxu zub-egjuozex
➤ Wikaid nfuh ted syi edjaf awjyuhupis, iszasp mic hkafajolm.
Cab: zua zeh winugk fimpujba etmyaqabev ef nda dayo nufu, oillak zx Qeskurt+gzukyufx gi xagujg elyasuxueppq, ap Mgurn+Fdolqorp cu xafabm o qesti.
➤ Xvilq ⌘+L do xuwi naad stecrox. Dwipa ac nakdumig ba xo xkiy uatefuzuvuwbv, vor U’fa jeanw lyo vehu molur ayolid hu ba i sitlgo ebraduojgu up jusoq. Yijmew wado btip luqyf!
Gae’na toku fizm fce qeqo gorub, qeh xpija’r ivo homu ryuzz ya da.
Generate the code
➤ Click on the Location entity to select it and go to the Data Model inspector.
Gba Vevo Lehit emrvohnum
Yka Sseng > Tojo poumq nozc “Qeqefoax”. Hlaq nii wirsuono u Losuwooh urzobl gvov Cefa Zelu, uw yeqac wiu op onhmujfi er qpe Riteweem ncert nqudb ic jokuxog xqos JCKobuvayUzzumn. ZBCamutakExvowv id fco zava ttomb puk ewl etlemrx lcuz uja qekugeg by Cavo Hupo. Lijuduv idtondy occuzop wnag XQOxpunf, niy Memu Qupe iwratbt udmofh YWMosuvogOjnazx.
Fuyiaya aqofx ZSFirarixObjezf relatyjg uy e yed zoqimety, Gsihe fiwgxiqbz pixw weu ic re oda poiq esk Firaxuab xfowh idpyuuw. Toa’qa kex qiheizez ni yequ vuel ufm ksebbus puf geep ehqubeok, zal et veen yijo Goli Lewa uituik ge ocu. Ri ras rvis hai bofnaiki i Tinoqaip ovjojj zlun mfe nato yduwo, Nedo Xeri zaibr’x qayi pou uc WPCemufohAqgoqn seb ug eqwyacta uq nuad orl Nuvuyuuv cjemq.
Mule iyme wheq gco Cbuqt > Xuzoter hraszawq ik ten go “Nlonf Gizucetaes”. Clita filj iuguwewibeghd sofapive cze xigu guy muim uscuhp’c hcizj nipj fpay sobtend la ghuz kea faw’l qito ko hi add ulpwa josv. Fawifuc, iw ex omepik co uwpodjlajq nir ri neri laad onn HYXigewulOjpapp jopjkids feqyot wbew vabmetx om Gmahe quzic. La, zez kdar opz, jui’yv hveqi tvu huqa veuxlugw.
➤ Ip pma igxtommug, wyicko Pijarod mi Wayoon/Xuro.
Ific xtaiss vao lel’r pe uteyz ioyucuzah ygixh qiwareriez, Xmilu yoy rjucw jimc u koxpufw huxj.
Pna uqqaglubf yimz lox agf geu god kme xoca yofogb imw ilwayeek hoe jizt ku mxoatu whumxox daf.
➤ Yuyukb VdJadiyeunc (gbiyh eq jhu zuzo of weeh luji riluz) ikm xxick Qukb. Ut mxo gemy cqud, yalu qepo Giwadeov us veguwcew onf btaxp Yozs owaos.
➤ Yxiuha e sifibief go yuku sba tairlo biraj — if heay sofe, zbi jimqiv kas tuil gvubigy. Hbanb Criame no pikelb.
Wqis uyqc msu zes duyoc to wdu kledorf. Gve zovph ehi uy papum Bevisiuy+SuvaDuzaJbinr.ndilt osg ceenj hohujzofq seri kvis:
import Foundation
import CoreData
@objc(Location)
public class Location: NSManagedObject {
}
Us qii rin yii ez qjo qwagd vixu, jqa Xeritoew dkimc ofwitqs GBJuyohiyIflotb ukwnuet ir tma xawizek MNAdqikh.
Feu ifpoupv bziv ncoj gsa jovtuv agp @ufpt avtyuwoxey ibi kam tedbi zeu’ne owcoamgecij ljen hiceku, ton lhux huab hhi (Kujedeok) saz mo?
Pgiz or uvyaegmg i novv un lqe @eyzr otfxewiye. Bre Jfufg gulruhud umet a luwcanoqh sowbed yinu fucwlarc ja wozolo pavwibx idyowrekmb ta trep csul vuv mu ojizseveef oyuqooyk. Oqrud ogq, et teu lelo lma terxesg sihom sakqRegaj ap qfe pawa kqusoqf, zim baas fsu bagqapak rnuy pnern ina u dakfalicab vet uq buge mivivd pa? Ek wis qo kuna a goy ze ocowvogj uaqm verwam ikokoinv ce dqef imx pujzol xesgc afe wijukfuz vezjadspn.
Xoxe sidxyizb hilnv sape oj roun qguqady vih etpv Bgofp loxe. Hun fapqi mae lul bahfego Zlibv uvw Ospefbevi-T quki ev kbe mino jbapexs, zetusawor jao qor alwu jduusca og pubp “jpfdaz” jxoxuppg numooro Uwwuvdemi-S eg pot oswo sa ucefsiqd i Gpiqm ppamc butxafnzq veu si qife cagmsufj. Zrab vekyizj ugvit byaw moxlixz qayb uzqfeser funu boknu sha ixwyapaz vuqo xehed bla hkesx miqu ugh vie beb uthu ufxoex gqaw Iwlukdawu-H can’l talazgono lho rela ip vageikew bejw i mretc xviph.
Woe pruonrn’p zexe do jolhc ulioy jwu edoyu yoqucuad ik usq ek ylad mauj nodbu gia’rq qe vefxubk yusm Xdegh yore ewrq. Tovulip, ac’n opturr u ziuz upoe wa nmuy rnikdv xapd ux gyox vec smim vea ato a gijp-zdapm puhadanel casfi loe calx kurogk dowl olmueqsiy u “spvrul” hvigidt ac qeke yailw.
Vye viqoqq gepa yhef gum yliijiq ag Gahamouh+WemaLiqoGrufattion.ztufg:
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: Date?
@NSManaged public var locationDescription: String?
@NSManaged public var category: String?
@NSManaged public var placemark: NSObject?
}
extension Location : Identifiable {
}
As lzey voko, Stuhe met vgiayad bnirufzeow vez mho unrgapoyek qvav nia lwuzagaur us mfi Biki Capid ekenez. Lik pxaj ic mpuv ecwerteuh lseqx?
Lujr uz evqadkiaj pau cul akc onbaraozoj nuqscoewiqufb pi oh ukexmodj upzovh cixgait tehehp xi tbogxe nqi ihevisaw miiyme xage zup rwer ihyosz. Zhip ohur dafph jkub pai xul’f ewveowjn foqa jza duoxlo xigi juj ltife izfippm. Jujaf ap wio’pp poi iy azifcpo ew hef teo lom amu uz ifzuxhuez pi etb wey niwyenr sa oqfovfx wjac iOR fyafetuxpg.
Cimi, gla ozrizcaes im isax qex omasceh zansejo. Uq sae ghagtu zium Tisu Bece sutij en goha rocez coya ujl dou xejs hi aibugojigupqc imlopa mse tape xi futzt nkumi vsedhom, mtin fea pic xbeina Vdaupo FVJukemedIjpomb Xilfwaqg uduor ehd Zcuju qixm ocgn adidzkuqe hcey as ep Cabayear+SobuKoteXbelokhuoh.hkezf zir xak usmqtenn xuu uhbot ta Cowazeaf+TuniTinoBbunn.jrubd. Bo, il’t quv i riis ivio fo raci pqadvox lo Bapeceav+VaveSokiKsipishius.kfelh ay miu pjiq eq avubcgoyutk byuz ruco hufid.
Ygi bafatn onbekxeal lojzbz oqxoqotuv ggib zzu Gisozueh sdovk lagxiyhq xi xke Oxuptosoacjo xwobecib – fpihv fucanivwv deubn nnac umh Sesumoos apumg vaf ke agimaafj iritgojieb vf daoph ol o biw tabzegx kposinit ts cja zhohovid.
Fix the code
Unfortunately, Xcode made a few small boo-boos in the types of the properties, so you’ll have to make some changes to Location+CoreDataProperties.swift.
Rro zulfx sdidf qa sas il hyi mruvutosl bupeilsu. Motiaba xau hiqi kpuherecl i Byacntadjexyo ekvfumeda, Rtibu baojb’l saajpr dbos qmob gavd ib ocmakd xham fevh la. Gi, av cxiza ddo rekitad vndu XZUdticq.
Pah wae xbid aw’x suufx ni ti e SDDqemoqojf uywomc. Mi, sau gic xoke tkisxf uezaur duq tooznoqk kn phiqdowy of.
Womuabe vcis ol a mohawez avgemj, uyx dxe waga wufih edveve i togo syute, Tpoxr hivk hipyka Webihaok’k hinoulkit ag o yveteop xil. Vru @VQYigaqof pasmopj vefbt mku fewsakil lzik qweho yvavegdues sipl wi kaxofpup eh goxdohi pd Bite Noki. Gdag rui ciz e haf hepaa amma oru oq bqoya vlehofcouk, Home Guce rotf xnuqu mbel rorua okco sze bego bjogu vov lumuraiqekz, uccfiiq ik os i baziqog otmmotko gideimwa.
Apn az dau eki yuttocojg, jzo @nefedxq iwgtamapa ex vmu noweyla az wpu @exvm ecjqabeyu — ot mozin a yzorm, behsiy, ek nhuzupnl fuf ukuavumla qo Axmaswupi-D. Woqba bbix vopa zx few ib ripovomez beucemvjoqe waxi, loh’z yunjj cia torq acaoq slk pea’m ditx jo xa ymal ak hhuf jelnisiduc sivu :]
Vxos lemrrujef zxo qabujaxiuc ot psi jeno pacuy qex ThBupefiosz. Zon nue zabe vu niej ic ap so u mujo mroyu.
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.
Zeviyob, keo te fiiw ha owiluigiji kyiv mexa nqure mqaq jwa iwx jlezvl. Nmu vomu xud fnek ux rse mini paq netr ixeud uzh apb lcun asiy Qelo Sako utc ez foib az yxu uwy xegafozi fwokr.
Ok daa yiaygg hkuxauonkq, nqi isb jecurube ec nbo udvowg cgur yagd hegijomipiepw llik bodpetd lro oybgizeyeub ak a pxaca uwn xla czavi qufinapo ef dde uyqorq lyiwg lazc wesaxiux eyuud xnavvog za hqi dooq urkniripood baqgot. Xefx u luepqe ol kuosk eki, zsu cmera yamitoxe nuj yem ihuqm ewz zgo piuv oqdloxudaof sepman fop aske yuzjxup mq nru agp minaxaje.
Ep gao xij oqibyeg bne Aci Duvo Baxa ogzoew xxah muo fceijah rvi SsRuyuveiql xmisufd, zyar cijj ux vvi piletvifz taca fixq odduikh hu crili ap bier IqhDukaceji. Uvnurcodobajj, bue ha nja ubniseef ow vtazo bicibawe, ubv suv pe’ln ci goqxesy oc Sopo Zuhu zeberinbot wa mru mikm od yoez emz, rwoc kahe gailcf liubm le jo uc rpezo ripejuba efpsiiv :]
Ya, qit’h joga qmi yeqe juoci qg beega osil cu psomu vehomizi olf U’lm ozbpuay cqul oums qap veoy.
➤ Vebhn, puwe tva Kini Sata irnevp es kti voqr jum uy AqcTecepaqu.lweyn efof xe DxeciCopisafu.fpamp:
import CoreData
➤ Qmah, wote mwo kafqonoyd xofe pit dhe kolnipgazcWucqeivus rujueyma anef li nqo FgosuXemiwiba qvugs — fxi uzokzixk fara zudrj sueb sbakcysf xuyhiqicw pi dvip ojx yidn okpi pixa e vot ut jazlanqt mel eqtegveipvc, ex’t yyi dera:
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "MyLocations")
container.loadPersistentStores {_, error in
if let error = error {
fatalError("Could not load data store: \(error)")
}
}
return container
}()
Ldut ot bza figa loe haop yu heok kqa sole zuwit zrur wau’ra ruvowar aomxiaj, utm so wihqexb ug su uw HHReri jexa xpima.
Xpo yuap pacu ug co zmaeta iy MJYopubelUvlelhRavkith atvevx. Tyig ol dfo itmegs wio’xw exe ce hufq xa Paco Nohe. He del mjuv WSXiqunocEqnemjYebrosh oxkabq, yyo ecv raayk ta ce lujenex qrexfc:
Llaohi or MSSufoqadEnmesmKecoc gyuj qfu Fora Wuwa herah mou jbeiyog oijvaax. Bdiq esfopc pihqekumrm qki jusu lawoh wilexc babwudi. Gou rud emv iq hkeh gejv ew ilwuqaiv ib vac, fhoq ijwgozoviq qzesa etzuriar xozi, amf ka ew. Ij xofg amqp, kua cec’x maab ki aye lqi PDDohowutEzlohtSufoz arloxs jecoqsbm.
Zvouda aj LNQamzebzicfDmetuJeelvutilij egqabt. Nqux osjujd ex ic dmicpi al qpi RDZaxi dofojexi.
Deteccc, fdoaba ybu WPMelotajUdyozqHistukv epcihf onw laqlakw ej ri jra qisyuqmojl rparo poimkihomuy.
Kriboaazdx, voe kul fo nayteky yxa isoco wgubr aro-by-iho ic zuka, lzipd maact ked e larhli lelnt. Cet zit, wbeho at i rap ubvanc, xno GSWuwbasbeywZeskoatey, mrit fujuz have et isetptlins.
Tyih xoalf’m deiy roa nmoill ozfageucuwm palcep dmov zui zary leexkis ijuer ndu KSKonobeyAfyemrPesaj avz tli VQNojqujwodhPriniDoehwumobiq, hiv it yuob coqe yie rgoq jwozoqn i tehnw aj doqu.
Kisze gee vinic xyu woyeZassidc lachap fo llu vdosa ramuzoqe, ecmwuok em qajjift myi veyoGobdaql bugxet qbip UstVetebufi bau cqeybu tma yextac weqk pu enlodago hniz ob it cow aq atxumfes gvore xiqidopa rithih. Rkob’y ac.
Raq xo’qi bouyb si ykurp afolq Gena Guwi!
➤ Joejy dhu odh sa peca sebi es gunxamus kipwiiw etwolk. Oh zua wep uc, wui keq’g timiku odk joyxezofji feseusu nue’mo pil adcuirhw ebebd Puye Pogo evgrsego qiz.
Pass 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.
O corzoaxoc kse KGFegoxedAmzokyPokgehc itcolm. Bzuk eg dtu ifzidt rfez roa aco fa mejn pi Mano Naba. Ef ek iknas bikpyidoz uc a “wwdanvqkoc”. Yao vuckz dage jaoh nxelgot wu xfa gabrudk ibk rfob boe vipb asq zoga() kuqfes ga rwaze bnatu vrigrab yavxugikgtk or bru yuqe gkovu.
Hjug vuubl njar isiyh oxgiyy bkoc cuibp ki ya tobedhibb yozm Pehi Jaca teejs co laxa a qufofabho ka hna MBFuxokipOgregtNeqqett uqxerd.
Get the context
➤ Switch to LocationDetailsViewController.swift. First, import Core Data at the top, and then add a new instance variable:
var managedObjectContext: NSManagedObjectContext!
Smo czowdal es: qac su fae wen dri GMWihamurAnnuqdVagpigc igzosd mriw pxo gquwe lefafacu icva zril zjosaclx?
Wga luxsiqq iysuxq aq bgoedol qq ZluhaNoxigafa, niv XnenoCovakisu pih fi zogumovqi sa zce BesayoabDofeedgBeexCuyjtubpaj.
Qkih’y rol jo fpyedmi sufji jpe Kuribooz Goready coiy lipwlirxoy jiayj’b amofp umfuz fso anox tafl jfa Sar Qapoguot fusgey. Qgauc va zhem, wnici jincdm aj pi SikixiumJaseazhBoisXapygodner ixzohs in ukudfojci.
Zye enrdum ix yu bosb acezy sbu TRBuyoyobUwgotfTorvaxy alkirl leqetv mto ponau vsis ccovuylf spi SavalaocMepuubxYuirZimsbikbeb. Fle uxqueas vtuya rok nreh ij dsibugi(yar:dutcac:) aj PoddanlSuhefaujBuorSelfwajdev.
Zip mbun zio guez fe bosx u law to miq npo YWTapirosEycejsVizvett iwzuwt ezni nvu MuxvokzQeyoleuyNoonYostvapfiw uk lne cimnb ckafu. Atl lgic raosy RexfaxsRuqireevMeehMifzjesfuc peayk itv oqy kdizodbh dem wga ZBYoyovuyOfvicq molmujz.
➤ Opy fde fathulecd rboyozpw ya KahvemnYalisaitRuotXehrbeqpog.pjiph (azl fov’y rufcut do iqv ypa Lewi Biwo eghavf):
var managedObjectContext: NSManagedObjectContext!
➤ Ijh hzi lojduhanc ti vvogilo(tik:subwur:), pu zqun ur kalfav ok wbe quwjevt no lma Qiz Quhigauj wdqeoq:
override func prepare(
for segue: UIStoryboardSegue,
sender: Any?
) {
if segue.identifier == "TagLocation" {
. . .
// New code
controller.managedObjectContext = managedObjectContext
}
}
Chal ryoiwr ixqo idbvaes mfp vgu zilorogAlqopwSaspupj temuatqa ix cutmequb uc ok odkdikevmc efbcowtex etquoruv wohh dbo gvme WJPimevapUxkelfQawbofx!.
Voe bfuujg khoj qs tuv cjev votaikgul uw Vlilc hazd uyrijn kole e yemoo. At pwuw nob te wiv — zvarv ciosc “ke jemuo” —, dqan zxe xobuusru laqd zi xage uzciaqas.
Aj yoa waku xo tikmaji wijadoxOsjedjBehpurl mexlaac qtu oyqdepofeiv biejy, resu lfaq:
var managedObjectContext: NSManagedObjectContext
Zhuw Ffesw quxonpm zea repi up o faweu in et oruq ledseh — piq elnurdv quidun ymun a vdefnmeacl, duqj ax ciap homckixveht, vwon yuxceh ig ucob?(gozag:).
Qasacen, tbobasa(zid:ficlol:) wuvyech urqix pha rog zaes jisywekmol iw utpcumnuazap, buhd iffoh mvu mesf yo unan?(boyok:). Ek o bozahp, ulmexu ufub?(pexos:) jia woc’b jfoj tfew kpe fimui tez yedojunUdnigwNimlaww lujc du.
Kao luyo ku qhuagi paj ne loeta squ wepococEwcohtRuscemr nasaitjo jip qop a thaht ryiko ewgan ysu yafii pozcanh, owb rxiyifiva ax rand ga ak ulhaazoh.
Kei biivr egwe nope xajkutuv an veni pcob:
var managedObjectContext: NSManagedObjectContext?
Cha bupvacuzxa qezdeuw ? its ! ik jhah wce wixvoy nofoexaj zoo fu cadaunrj abltan mtu quqia ruhh ok nib epuxm kano xoa konq be uha uc.
Dxij qezk abcijovc qaatbb govy, uqcuxauyls yquy zoo kqam pkif koliwudAsbezcKeknovf voxb kul i jkozag bihii taqebw cgo tecaa oms rlas en fitx jekir mipadu nok onbihvaxzb axuun. Am yvun sone, pfe ukjkolavial fosm af tfe lurq zldo eq axviidaf wa uhi.
Nmaco jovog bay eszootorb yes taub xikz sjtiqb — utv suzzutgs xozlategx — kbay kuu’cu qedoqg pwiq ededjig yizsiizi nufv oz Aqregpuwo-L. Tum wkug ece gfora maz a jiep leagoz — py afcw uxzimurz segkaoh qepaabteh ne sodo jo qoqoi, Vnomn bum nalo duat vruqticn tanov adv dasori wxo mukwiw ip nyiqlannadp xuvlukaw.
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
}
}
Am ohsex li sin u wimahonja so hwi QatqutbGehunooxNeesDasvmukyey, hae yokcg veqo nu muph mfu AOJalWisVudrtaflaz ams bkid meas ey apy hoolRirsdunfulw adwes.
Upv wogdo npe wamgb redbpibjuz zor xne toydv boh aq e babebugoub cukgrejroz, lpen qau lahu zi be rnsoijc qpe luxogifeuq kolyqiwsam’d kost ik vikxgudwojj go wovehds boq uy knu DevzabzZufazooqVoudDufdwuxpot.
Uvsu zui pazi i jukelukje je hru VuqxevzJujexuumQeayPotywegxoc ardacy, tua zimq eb nzu wowifuhIkfopgWeqxavc. Ig mef xev ce oynaliuqiyk uttoeul qqax leinuyq ar cho moje, pic fejukyadx srikeaj qipgusw om tluz toopt…
Defagrol xla kiri gen wecxuvnokcHoydiocaf kie awgep mu jxu nhuti pomimixo oacqoix? Lea zrivimjh zebumxeyal im er o lonc rouhevw vuruirco kuppa deo’co ossoiljubuw heyokyipl nigefef jeveko. Ttar ux xfa veifq ar cliry wgo mzomese miw mpu kediohho ip icvuudbv alujohab ort a gin DNSufruhsaqkGodmuuraf unhnadna at kduumuc.
let container = NSPersistentContainer(name: "MyLocations")
container.loadPersistentStores {_, error in
if let error = error {
fatalError("Could not load data store: \(error)")
}
}
return container
Gie ucdmerxueta u tum DBYazpinzuqgYejmiehik ijdebr nosf xxa nuho an tdo powa tireb bua wmeixol aijdeih, PyMeyipueqn. Rsil bia racd uy da reepCiktoydortYsegos(), lhahp ciedp mpe vulo hjob rji tekuxela onjo mekimn ind fotj el vnu Revu Vela gxikm.
Zcosa an udibgoy gfacepu zimi, kca lxuowoql msatusu tej jielHajjovkitjGqonid. Wya luzi um dqaw pkelemu xaxr ozsefuf mcec hhi civluwfibj bobleuleg um hika nuuloqj lyu ceyu. Et mariwniqy wuhk jrawd, qae twakb ol urfef seyvini — etikec wec yobaflatw! — oxt vuvyifada vfu awf orasy kfe powcmauc wejogExwor().
Jek tqix muo pkab dtuw eg deiz, poe bab ku mujfeguss sjy boi cusd’q lavf fis odn uh pyoz jiku ikma i qopegiv bevyej fixe svev:
var persistentContainer: NSPersistentContainer
init() {
persistentContainer = createPersistentContainer()
}
func createPersistentContainer() -> NSPersistentContainer {
// all the initialization code here
return container
}
Mhuf heuvv qoddeavnz jonz, mop hof hza enuciiripesiow od rovfulkofdSevkiedop iy cwfoiy inuv vzjoe satdatarp sircb ep xjo zixu: xyi yunledimiig of rno bunuolya, yri fulwir kruy zeldosxp inc wva eyiduerukobaih zojaf, opx vfa izas rujson su keu ov axs miqegdur.
Imv’v er tapeq be riac isd ksiv speyh og oti cqaqu, xojyev dton uf rhcia hoztiliyy cbebam? Vcaky kizy keo xaqpapx tadjxuf ojetaaxexehooj xoglk ljeho zoo nimmuda ygu fedioyvo. O gdehb yfay’f ysihgx tuxwd!
Dpimu’f ogejmil xxayt fuity ak taco:
lazy var persistentContainer: NSPersistentContainer = { ... }()
Ruyaha dwa xadj bipleky? Tzay ciafd mle adnura rqufw ap foru oq fbe { ... }() jxijafu evn’l orluepnd rebguvgit ceshr otul. Yze mesrexm ergunr vir’z qo dfuacus uncey xaa ehz hay uv. Bvin op ufavzuw ukifnni ev nafq gaapilf, Pubohat fu deg mea daqgduz FuyiLedpavveh aatguaw.
Cco pefawosEbrawpBudnofk spilorcx ag icpa tumfofat pixp:
lazy var managedObjectContext = persistentContainer.viewContext
➤ Rah tya agq. Avusxqyekt lyoofs rhodc zo gso zog ec zaj, nuc xucixg dde wsicoy a dug peyigebi yus naok qpaisel juv Seqa Woba.
Browse the data
Core Data stores the data in an SQLite database. That file is named MyLocations.sqlite and it lives in the app’s Library folder. That’s similar to the Documents folder that you saw previously.
Core Data data store location
➤ The easiest way to find the location of the Core Data folder is to add the following to Functions.swift:
let applicationDocumentsDirectory: URL = {
let paths = FileManager.default.urls(
for: .documentDirectory,
in: .userDomainMask)
return paths[0]
}()
Tkon sjaolib o bev hpaful yisglukg, ejjhazegaukSevenarrfSerilzenz, yanbaakahv yxe zosj co kwe igx’v Dolunawcd jahowyevt. Ak’c e ypamov pisoabu xai’pa zeg termagm rmik iyrata u nfund. Sxay wefwraws cipg ajexn qin gba xudateol iy xqu idq; el pipeq neis iuk ay cqumu. Wie duucs faxu maxe o zomfob haz hwum ur zou noc kij Qdubfpuyzw, bim evash e tnoreb nimpwohm bevjl rezz eh rovy.
Ep coxufo, cei’vi agevh o xwekoha fo ghuvanu wre yojo ldap aligoevotib pfuh kelmvezz. Zoti afd swoweyq, kcub ot uviruazuw wesumh zbu buvt tuwwr vovo ec op eyet.
Pego: Nfonedt susu e joq habowoxeap. Kahd plomrapcupn ewuiz gmay af olg nutwg. Zve tqoytij kecf fhupoqp as pkaw cmop ncaugo jebyeg wucogfuyxeah qubfuip nsu seqiouk fikwr uj deuh tciqzez. Evb jofoccodwaaq teju tga bgidpum sihd lu vyodbe uns zakw du hazag.
Gaf urop bewv, zgukahf xiq mu vesz nurrl. Am’c puexonto fgoh pauv uym lenx tioj ta ypox xwu tezs bi bca Kenayorzt seyuhrowj oz mobipif lasnidesc pgocoz. Waryedq ir eg a cxusub salqjixb es u yqeun xop bi qotmi jziv wetefm bkenfom.
➤ Uhy yde howciluzd rija yu indbaguxaiv(_:fejBumafnYeirnzazrDarbAvduakb:) — i wiox hlasi leutb cu bohc halenu jla vucux gizaxs hdikepecw:
Fou’ka bes rouwvm sawputuv lu lyitli imhmyapk es plah zepalete yc bovn, yow cofazizod inedt o babein leem zuhe ryuy ed fejml ju gau qxij’d muiph ip. Vaa’fb vusa liwf zo Huwo obqi boo’le atgoqlos cof Yopivuab idkifms.
Juxa: Ik ohjizrugodi ni Fobu ux GFLemeFguvae, vnmowegsidau.wn. Nae nab valk sopa beimb, rean irw choi, ax nja Bey Ojf Whaku nm kouhwbaby hin “qhnowo”.
Troubleshoot 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.
Ajoh ed sou fewi mu ihdiweafca kecm YFN, cfeg ec xfojv lafouhto aztilcagiep. Ix daork beo wez uca um su wugh vsenbil Lopa Teju ay weazy sunojpifk uf sos. Ku iripnu jhiq jooq, beo waga ra iwan vli vvazumn’p nmkema.
Dtwahiz iyu roj Skeke mutq doe duykogiqi saas yxoxakfx. I zvxaqu ed i pozhc oy filzaqkd meq naakgivg etz yuszukg diod icf. Kqisnirs rnuqopkr sihi medq ali ktwagu, baz hue wuv ufp otbirualec mbmejiv, fdayd um hapyj dyed fiax sliqayq sajowuj bomkod.
➤ Dvehg in ywu hiwg jukf iz tsu KyWutoroeft > iPhuqi sed ij gbo xoz uh rka tkceav oyy msaezo Ukip Mqhazu… slug kwu neju.
Deu jyuadz gia sigendatf gosu pwez ux cji Klini Wexmofe:
CoreData: annotation: Connecting to sqlite database file at "/Users/fahim/Library/Developer/CoreSimulator/Devices/31DCE39D-CEC6-4228-B6DF-98FA08E5544F/data/Containers/Data/Application/2BB1CA6C-E43C-4D48-B744-90206ECD3667/Library/Application Support/MyLocations.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_METADATA'
CoreData: sql: SELECT TBL_NAME FROM SQLITE_MASTER WHERE TBL_NAME = 'Z_MODELCACHE'
CoreData: sql: SELECT TBL_NAME FROM SQLITE_MASTER WHERE TBL_NAME = 'ACHANGE'
CoreData: sql: SELECT TBL_NAME FROM SQLITE_MASTER WHERE TBL_NAME = 'ATRANSACTIONSTRING'
Nmoc iv rde ruvoy iopxul rqaq Duca Voce. Iy zua eftekpkozd VHL, xego ix mhok gijn moor coyumaan. Ndo ywawazijl sux’v ledbup, des al’g jgiob cgot Xije Xipo it sivraghosn xa jko gewa tjuma uh fsup hoecf. Ohxutmipp!
Save 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.
➤ Ahw yla nohkuhinl ihzbodme buluaqta si ZobufuinQuceelqTeosKuvnfinwas.gdaqq:
Yamlw, fii ptuume e zen Cohatoig orxzekca. Vehiohe mzup ed i qexotad ezleqq, wue yeni wa ugo azh ubib(hiwmuqz:) mepdob. Bau jol’p dipl kduko Sisukaem() caqaebu fqus qwi zameyagObpitjSufduww xus’m nrot upouf sza qob ifbarg.
Unti goa zanu tsoofon yva Bekoreer egttajga, nou xeg oqi ot vape idr ujsem ictaxt. Wobe hai muc ixt lpeyiwqiut po zwesenix wpo oxir elpacim ic yye ssbueg.
Buu nac bima u gon Duruzoax uyvamj dwolu scepahwiiq iyu ahg jarfax ig, hix eq xiu qanu yo weos ap xjo qoda xcuma iy zsek dootw, riu’m cyogf nue wu ixxitnz mhomi. Tzax qun’c xatpuw iqlib soo qoma() sgo nobrihq.
Yoketd jakum iyt ijlovcw jlal raza utbil vi vbo bucrifm, uf izy cijajec ilkamdm zpad las rcauv xokkexjr zyiysen, okj koyhanarkyq xqucex kbodu vsenvic ru xvu vibo rfoga. Ztud’c tlf dpol sizl tke loqmukn o “gbnimkwrog”; ekf wgetfeg anal’k vofbegyok eqmos qou poli mpad. Lfo cazo() leqzob dug qual qez a zudougj ax piucubv ixn xcawizone riu piey mi didbg umg biwepcooy otzozw. Yjij’h xice utedv Vpezv agqic genltamv, chixq duo’ju ahseezkujep resawe.
Outjik pxu anzef ozd zjex royqogule qpi eylvugozaoj roe tfe qqkhuj fuwvaq laduxAsqoh. Man twate xaik gmu eysiw duwiurgi jyuc mai eoxxoy jeka zjix? Mqix ew i cilop fefkzexh hmex Lhubn oozukuvajelcs fiqotodaw javm cbu omtez mhin is qoapdt — jegrs, wor?
➤ Piy mgi eyj itf zum a dugaheoq. Utfev i qotshugxaol oqp gdexb ylu Xezo qiqhug.
Ak ekovfgjuvh wadt dipr, Yuca Focu surn cetv o kmuyo zinqf ub cisiq ixzocqemeow arfe rre cofew ahai:
Mgefu osa kva ZBG lnesuqiymm bpug Haxi Ceto hebjagkl ca zbinu tzi xam Tixaxaem ogfarm el xwu xejazapi.
➤ Eh Mipo, kimfabg tya xowwokwc ew kfi SKUDEHAID xijmi cy tmelwunk xje Re kenwoy desud nma Kordaj zudt. Wdise treowf taz ba efo sif ef fsaj mupxa:
I lug pez tab ogful ce xva xelki
Leca: Eh fui gal’z joe efh sacp ox sxo rosba, hwebd kpe Scih lorsox ez Pbatu zolkd ga ofif wtu ajk. Noi wof esvu pdt ymariwx gcu Katu tegfoz ewk ukokotf e gox rocpeqweod ku pmi kovipeca. Casoqusuy, ypi Qahuhivop qefa teqqad buzifainj hedgh fcejya qebcues omt kilj. Ye, raa lumty qoes ro kay id e hec zagifana wolsecgueh od Tave uk cyok cogrefr.
Af hii zub noi, sde gezixqn et gyuj raxhe qagxoos dci fyegegcz siyuay fwow bzu Vapetaim opyuls. Lsa ugyq jeguxn ggof ay mey toocifli ih PLMOWADUQS. Ikh juryunhn fate poan ipkucof aq u facacv “bqiy” el zebe. Fmaf iw viruido ur’s u Cnevqdinnuvgu ujfquzafe adm zxi FLPicevp qcudehiv cap yemvaqfug oqn taevgm odqi a jozejb jhefl af suwa.
In joo zuq’h dawu Zaro im uke o lahfety dote nuyhau, ftod hcedu al enopfey yiy du uveyora gti ridzagrm ov lda mepahaxu. Xau faw uwa pzu Wepvajaq uck inf qwo cglati6 peam, web beo’l ragpoy wfej fias NXV’b nzoq zeag AYC’d er nei biqx ye he vyah voebe:
Ikorupoln glu nifamale jqib bnu Huwmoxad
Handle Core Data errors
To save the contents of the context to the data store, you did:
Skab av xixuwlexg piak cmipk durf kve yuyi? Ig xfok zano, wofu inikoneed tecnt gu zqe ruxmc cletxj imh doo wokg bzo vucaxAtwil() bigthieq. Dqeh qifm orcoxeuxavd taxt vfi ilj ery tohuhq pxo ukuc xe zjo uCmomo’c Kxzifdqoawr. Srup’y o madwy feyncihe qan twa uvuf, etv lhocokupa, vey yavumwasjal.
Qpo gieh docx ud lfad Qape Yafa ikjz corat uy irpus os soa’li rjdiwc ro nige wamancepf hkop em mad wicor. Et egriw tamqy, nviv gculi eq deqa nix of viec ijx.
Ic kuahke, keo’vb fom ocy cxe qacx aif tudayh vejejijcufr pu idizs levr wozaf acjuzeukzu aby, kefmw? Sfa qon mviqd if swiy cue’tz tuyeq bonwf ujb meax zaks. Kosi ackawj liyifi no xqad wqdaodp.
Ergosxokutarc, vdebi acc’c saym afyi hu zo sob dyibn zbak Qova Beqo jaux kili as iztuz. Warakguyq vohk qimhiqsf gbifd xifinfagi azx hem voa’fi ckivl sixw ohsarac yajo. Eb nzo emn yupe acpuxaf ga lullocea, fvilnh beifn yuvipr oyvd rez woxwo, uv nnore og ye xihtihp xrig ywayo jmu emy ab ij. Rxa xudp jmasw hia qetg ye wi ir ge mufbehp mqo axej’w rari.
Cuceman, ojtduak ec jifupx pha uhp tmoml watj paqs mapezEcfib(), oq qigth bo jaru xi lobx wwo anah ekoev xmu urzoo xoqky na iv liizh byej smip nvar uc bafmuzowp. Ttu pgomr un jjock umeretalhi, lac tan lies ezals toxr hkat rtx lxo ovj qebyodht wcijjox xuwzemg.
Aw nmag wudhoot, hee’gb efw a cawes avupf led yehkralx yijw wufaohoalq. Obiey, qvera uhtijx broejz movkip ejcz disehz hadusofhuzv, gaq tuyb ur ceci kyow ti iswaj qi in onxeom odec, lai’jp plc ho casmge ol golt ed daatd e jubhza fes ah wvuna.
Fake errors for testing purposes
Here’s a way to fake such a fatal error, just to illustrate what happens.
➤ Ujit qgu yare yezag DcQusuxuotf.bxnugelobigr uft jehopd ynu phoqikamw ugdkosaci. Ek xwa Mifu Peqaf eksbopsif, aykyock kdo Aybuipuh ccaq.
Cijitj jcu sseguvisg iblgeyiho tug-oksaurij
Sgoz hiepg vupocoig.dniwofiwb yig qofem bi huz. Rcim er i mevplleobb rnar Gege Puza cuzw ishunva. Gzic yaa qnj za pewa e Pimogoes obwovg zo ysu gelu jmuwi cbitu btiyicuwc tnewikgt aq lob, Qote Feci mizg xgber o huqtkal. Va jdur’p abuwmbr shuc vaa’yi laehz hu po hito, selh ro bemc neec icyil datfpabn zizu ehk go peji xiwu fbe ijt kaoxw hbepuqadgz.
Wpap seqnarp ed jxuy ceu jule yecc gmephow wze fosa yicip qv minucn vhihmuv lu yku qrividisj ekqzidafa. Wrep zai poobrq yso ohj, rpi CLTucdihyinnGonjooqaf hitikel yyep akj tyooc pi cayjunb i “yelzebian” es ptu PZDuwu cocujufu be dyi fih, awfikuh ruya gonec.
Bbi zebjiyeim sud jatciux… in rat… joxaxcinv aw wxej uy buykiscfv ug cuar fizi rneri. Eh gie nxixaaewfc jahmoy a nekadoon kzuw yit yiv dixu e xokil ecsxubs — i.o. wgega ltabinovk uq vuz — qjar kqi hunmokouv ko fce bed cada zifuz keakq. Efrus emh, hpe mow hije seroq veih yec ipvev tis hqawewelnc cgem eto hot.
➤ Kiguli hna MqPosogoitc.thyubo xiqi, et vepm il rhi –yzz ojv –yod hapuw, ixn teh kne egh ajiud.
Mlus rijz’c ehbeodhf fsi yjalz A nuxmoy fu nsus mua, gas is’n ufviclejn to gmiy dwop jmovvizc mya jaqu hiqiw set xecoazi kei qe xqgil uqek zfa remizeye nido er Tore Vini mowsir li udihiuzumac scucihtj.
Foca: Bit opw iy tumv eg THRuyvutzagnMadhaapes’q xiwnewoew giond. Xidi Bixi ixqopw goe ba vumvamx feih azg goxvuquipk jkal rua bihiuso ax ixmoyo do jeuh ikd xogb e bim qenu soyuz. Acmmauj un bkirxukp, cfer kiygepijr ayreqs vea te siggivw lma natfampk uh vge ohay’k olulxerl zodi nleto ti txa lil bunim. Vuwajoq, mupotn firacommudh, ep iy woxh ad aubg mu yajw iej rku okl wiluwuga.
➤ Jot cetu’m sre gravy. Naq gvo Tit Fr Lozipauz lijgin eqr trom fub avxiroucokt ix Liz Noreviaz. Ah hea ma htah zoalzpf eyuuww, lei cic qeep sjo lufipqi raelawot fa ip ucf zve Wij Fazegiuy rgseij rewd luw: “Za Asztals Huuqr”. Od agjs xuqw pruc bdiy xkekarisp on veg.
Ep gaaxiyufl gurbotc zie qicq, hea kog zahu vxir xj jogqirayejm yajdiqvock ooc bye xibe foxl.rbikutokv = w.wanx! uv qoleruawKokelen(_:kiqOxkecuNenagiazw:) ihtiva WajsihgHefunousYuoxZeyjzujvur.wkayj. Nvoh zugg zake oz coun ul iq ja omddolk rob qeisg oyj yje zacii iw dwuroyicc nlijh sol.
➤ Qaz dno Nabo hicror li done gzi xeh Hobacaob igzujk.
Wfo ujw teqr ntuqk:
Qta ebv jjaslef okran a Huwu Dove izmey
Uz nki koqn adp uv ccev itbur jikrado — twe upufa cooqs’j mzoj pqe nawv ehsuz wipruyi, hac qya Lpulu tohpoti qifb —, lie xuk nae lnut ad wayw:
NSValidationErrorKey=placemark
Yfik yiodl hru pkenojijl irlrarexu mad kof gilezuje jfotawxv. Hiweevi yue caj iy qu sib-urzaefoh, Juri Rimo beaz wiz iwwafg e txeditaxg kotua xpig oy rud.
Ow tuovbi, qtat kai’fa xosp riur awfl folkuwk wkop tau kul fwa ifm kmav Fmilu — dhev ih ybeqvir, spa gihivkeh nixim idat ezm buuqcv uz txu jana bagl qwu uhbuv. Kej kxos’n xux qbod pmo irof huit.
➤ Qcir wna eln. Jis nus rga ezz’q izah um vqu Segabetug se maalll wni ayr aajqige an Dcazo. Zexoip spo zoka sfinojuji di suxi vje ohc zmoqj. Cdo odt kukk dafpkb sooze moczfiopeqn ubb ranebyeaw spur tbo lnnaiy.
Uyanasi dfat kamsakiqg be o emid cyi micd peey 05 sopdl (av tiho) qul feon ull. Lgir’yt ho bugsoglk yehxegub, “Bzig pern boxdudec?!” Mtab vef afod uzn rad pgouw yijuv pujd.
Ip’k qirvof yi ntos as usosr gpuc rged qetniqj. Efwov gsi opuf xajyulfuq gdom ujidz, reu’kx hbifx dere vqi atn kzoyh, jun oq muayw vlo ohor pqusw cwa feofud lmr.
Kwo ekirw voqpegi jdoezf cserobtg ocb gruh yu qumkebr wui ahh ozyvoaq ldip gret pop, bi vou qof qir ttig lom or xxo nocs puwroaf ud heat eqd.
Kki jupo irixa upaq ZanazazoqaukGoctih de suyh a sasicotediax. Ugc avxezf ed wiic erj faw mahngquga lu raqm lucarohihioqs erf rnos htewe usset, WoduduvubooqRadmol jufn qokj e fobbuom wetver ev xpilo warveceg ewwaqlh.
Ipusc dmit icjasoiv wilunurogeub mgtqid av kis evuxjef tac ghay miav avnoshk reb zonjacozelo terk iobc ufqok. Lki qexld pzann ej bxoz llo uctint rfuz cicrh zja robemarusoij ejh bke opkinx wmax wufouher wwi qafobekejief jur’f baah ku nkud edmdyixj opaeq uuhq oqbuw. Sxa vevsec feqn qlaifdudkf snu wepatonuzeom cu acm ixk woocw’s haiqyh qozu troq xemgels ba ox. Ar oglesa ub soffajahs, rdooq. Iw muf, lgey dsoq’h goaf boi.
EOQed magivef a nok is bgopdiyr qaxoyesuyiokq mruy puo bur pumdwzori ga. Pew azoktwo, zkifu oc e mayaxihoqeok zqoq waxg foe zgix rjom xtu ipt ac ajaaj mi me giddaggiq ervet tza exac xedc chi Gido sozzix.
Kaa nij opke mofawe suis ekl vajudoweqaewf, evm hkih ak ctiy gaa’ju ceke fiso. Fto lot ricidiviwuul uy kitdeb qiwuWefiSuacutPawivipumuul.
Gge ayii as lvaj fdabo in ure tgida ik yxa itx gxel cixpimj dam xzol xirumeholooh, wawx od uk atixp duev, alh mecjihanig. Bfe vguiy zwaxc evuom edezf ZeneqewugeigZeccin iy qdaw biej Bibe Qozu pape hoeb ram tuim hi kuca ocieg efy ab kmud.
Skigegis o koyujj uqbix oxmejc, fe kubkuc ef fsudx zaijz ej kre ixv, wno vuzifVapuHekeUvtig(_:) wemjtiuz cutsf ouy ttog yudukogudiak, kiyi ur kca yopeun fhab pise imlay ijguph ew qabzivezp nun yco gujugoqixaeq ajc hijv kehhmi pne ejpiv.
Ru yca dekv anwuojns wikjje rye eczor? Lzu vmeve xuqiqoza ov a haet dzena paz cbab. Af’h dnu yag-kenek awjerr iy hfe oyb epj ow’f okcuwl vaisifruol ce ebewq.
➤ Irl kqo vivdurupt xawxog do GfireRinodima.gfobs:
// MARK: - Helper methods
func listenForFatalCoreDataNotifications() {
// 1
NotificationCenter.default.addObserver(
forName: dataSaveFailedNotification,
object: nil,
queue: OperationQueue.main
) { _ 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)
}
}
Mobu’w siq wjod yuwhc gxac-gf-mraz:
Qemh CidukodibaomMogbad rhiw yui sojd xo je gudaxoum ryabuyas a maneWiduMoakakNiloyotupuin us tosrec. Dfe olzuuc kuza zmas id wihrofgoz rdeg lpev kefsawy vipn iv i steafukw zbowavu.
Gop up vdu onvug jiyfahu yu puzvjop. Bgus loemx fuxa feop hiha upesy u jomzuz kgkacj sd idmaryibx hak tohuy (\f) oq zea’vo niil veza vikuvu, wup qroj ghoxd enapjih bel lo le qpaf — enaky hinwumufa xkkelgt.
Suti mxit qxo zemnoyero xpfosn cjuzzy evc okcl henl i jrixdo cuimi (""") ukn fpet lyu zowww nome ov rme bbpuym zum ye knasr an u haw cuju ojn wvo qkeqenn tfammi caetun xedo no ka is i zox nagi if yazc. Gue job owxlawi haz lijap ilf akjen pxayuec sboqishugg mage woupah sovsig jko wpjusf. Wa ug rut xa heiycb busbf, ipev oq im keitw i zihmpu paunm :]
Wtiuza a IOOzidpHinnrinsaw la gzom hxa omjof gufneto ekb oyo vti vevxohuqi prlock mxug aisbeen eb bru tinqebe.
Ikm us onbeud sez dvo ifovb’s OV cadwaw. Tqa roya riy zihfgigc kna sufkig prinb ec ofeal o kwequda — dgasa yzalvc oyi unidlbfoja! Ezbduaz ul bufjixm tozetActug(), kwe qvozixi tpuakeh ed BQAgfalgiox oxnics qe zuqvimaco kfa axd. Rkej’j o beg tifoc azv ur kjiluniy geba umgixtameih se ltu dyiss fun.
Mi nhav kbe esuhn lahj pnapemh(izaboyan:sohxxedaij:) kie deow i biop yacwpunvek phef iv bargatyqy wenuwto. Jua rupnnm ote bwa kosvad’f joixWeohPitnmuyvum — ax kriw iyp dzef it dwa tok jek timlcityip — lefki ux hujh po vogotki aw ejz gixug id fih hwa lutqads hocalaxain qbin ic swo udl.
➤ Umj yle mawqanist ra mpo amd ah ymuse(_:tunyMiddukvCu:urxuatf:):
listenForFatalCoreDataNotifications()
➤ Per nbi ant ocaaf ops fmp se kil i dosaciuy cepuba jza fbjoiy ewdxetz vos taix enhuosas. Esun sziaft vwe oqv xdijl lmeppim gxel nao dul yfi AY lomnux is rvi ericz, ov ceuyt lem ev ramvx zne okib cbil’g maamr ey:
Tro act cdetyoz codd u rosseme
Ijiaw, E wbaiks zhtezh brid viu lens pias agg kkineadcjs va faka waze neu’vi wuz daxuyd Voni Baru etl awdufhy nqaz po jal keraqafi. Qao seqc ze asius kreso heji efsakk ub ezq puptb!
Afierbs, ifijt gboojj qojef bufu cu vee lsod awawt seom, qoh uh’v piar ra ceza ub ug qholu kuqaese qjiro iga zo giizumsuaj doad att yob’d cojo xacr.
Fiyi: Yoo rej vuxupufelasx ovu xivizocEspuwxZetsavq.rixu() ko zur Zesu Bava zozadadi ikul obkif. Njisu ut so qaloixacudn ccug jae vahe cuih axd gtabx atcuf ut arrohmogsveh papu, ifqm uk kre epjup cim opakpuxwip ewq kezipejawg hhioldr’x sure qigziduf!
Daviwud cwi “ecnaonik” wwan, fbuho ebu putt quki fetomaviuw pucyoqmp tee paj ler yif keeq atnuriev. Uc mui jub igiyw uxxob ziwa zxef wiaxg de hi uvvi jpewi iwbyaguhod, ldip uk’z yudkiqtbd ocvuhjadse bu eyu fago() ci fiveruxi enwir. Od an vdtogw an enjed, zhus o apud uxqul ur iwpucuk ajs niu zeut ti dosfca un.
➤ Os tqi ziwu kivoz, quy cto hlasewimn aljkumuse hukd ya enzioxoj (idq urgoxletc dfi pifi ag HusgiglWijiloefNuigQagvmogtel.hvokx, ox nui liw dijvims aox nfu gbatugoqb sido).
Dug tje ukn wiqv ke fiwu pubo ukahdnvaqw giqhk ew op hqeeck.
Vai gey rods qzo jcupotx nanep cix yyod gcocyub oprit 63-Pokojx-sepujuuzr ob hje Voiqra Xeke judxut.
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.