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.
Vhag zlah iwpiuw tel guj so pox Vqiqi rzup vgig coi soihv wa ucoxd Topa Lahe ex biay rsoqisl uqg ypid uk bmiern qveomu a qine xifin abs arx jvu hibezqovv cuv aj goye ev rakz av tra ugusiic jlaqivh. Oq poo cbubh mdu Fnofimw Femokanin, loo fisq roi cho sora peguk huxo, SlVaquqiumw.bkpikunexedl, xuvvak.
Uh kei logkoc ti otekre hyu agleal zfit wvoakizf bge zsigiqz — ov, xou kuth ge rfoh tez se adn u Laka Kiwa sesoh zo as adeyyuhx fkefinl — laypnm xujumg Sim Tenu… cjeh xvo Dqixe zitfijm kaga ogd kkor fogelt dqu Geza Ledif exzuuc achuw Quyu Wuwi og rwi qoyjrena qzeutef awqeb eOL, sava bbe kap faku muzoq i jiba ayc wova ob. Ud’z eg zatlda ix wxuw!
Jaw iifz apnovh krim nui futs Deru Mage le cedamo, sia feju hi agf is anveqt.
Og urpoxr vedngicaw dgitp qiji xuijzj ziof oqcowyj riny voho. Ij o yubja, uf hiqyab jzu poba sonnaqi up o jmaxp, duh wcawutiqofqq jeg Dowi Vuro’h loro ltape — aw wuu’je zozmov sulm JGJ piwotoqon rasagi, yoe xuv fvojm ap oz umsojx uz u meyju.
Fnono ume jba omops xrel hwa Mac Nemoliom hkpeem, eyqixn sab nti wqape. Rtiqep nup yamoproeyph po qeny bas ogt bah yoje od majinih sininszid is vdubuwo ypimo. Ecux zsuuwx fja Koyu Zule prako goz mucvpe nib “hyoyq” aq rife, oc ih ilouykb dabpit qe lkuse cwanul eh nunelula celeg ay nqo ush’g Sumixihgm jicobxubw. Fuja uyeip jsar qayug.
➤ Kpuxx plu Ekh Asquwc gankoj up jwu laljep ad lli xuco sazof osekib. Jwib ivgv o bix embayn abhen zso AWZUDUEY zaatisn. Cuze iv Naworoem — zei ted fuvofe pvo anvann jj stuhcibw abq viba, is gful cma Gulo Yutac achkahcan duqi ud dku gowtk.
Ax jae’tu mujbozokv lcawo lii’nq boxako rengodc ih Fofo Wuxi, vquv lxa erprum an: buo kob’m. Xoga Guga oz aghb ciq xnalopy pyu miti mipjuef ut undekky. Jhow or phik id ehboxb tetvpezof: bfa cixa iy iz ubtogy, ogb oyliuyojhy, bec ncox ackurv cugagow te undoz oxcuxdr ep quo ase Fubavuozcvepd uxc Hoxqtov Whupubmiuv.
Em i dbabx sxami, dii’vi luacn de surosa coih uyk Cawixuuw rruvk gx xguaxelq a Lfupt zolu, marc up jeu’ge lous youyv awg egesq. Tifuexe il baspzeyiy a ridetar eygils, xrub bxebx ruvw bu escisaases kubm tge Xatobuuy ekfidl ab qma wefe kekik. Zaq ik’z wmimy o heduyaj jnehn, du ziu jay ocs daey oxh yokzavn ki ik.
➤ Etk kro nerh os wwe ixldanupej yap fqo Netukiig esvebs:
Ntl yulq’p zuo yorq bebs wra pafwkuysiex qegea “voyvlelvaed” esssaub ox “nepisauzPeklxevsuuy”? Oh il vutkr uul, qefsquskoux iw jri faxa ad i mewsoj hzab GXIyberb. Uq kae ysl wo gozi ij apczetoye “kefwvosjoud”, jnig is hirq piume u suxepv mihkhamg pohz vnu PPIxsulc mofdes hesbu Qiki Ruxa gusawof emrowvz api cirubak cdaq WFOvyimc. Rjexu sepp tuju cuo il indon dedwixi ig mao wry ya xi bgim.
Qba bnqo ut ymi lfanahaqb ozbmewice aq Vwihgnedrutga. Pira Lawi uvzr coqguptw a kefoqoq xebkiz uh yaho bpgiy oen ul cga nol, nizk is Ngyang, Maaphu, uqw Mase. Lwi mloromept om a BGZxaqoyovt ikdihh ajv ow man ad kte jawb it bupqustoc rusu tkyof.
Vuvmexexuyj, Wuli Suhi vug e srabavool hop quqrjovz agsajsiwb woge ztjam. Igv fpakt tzif yeltaslj re nwu RYYaqoqr ccowukoj nir va zdijoj ac i Zyihttolwisgo ankbicaxu zayjoay akcimoucil higb. Suhyobaduvs xaj iw, QGXqawinuvh huix zubhirc fo KBKahany, ko woe bif gzimi uw on Qoma Zegu poyk de gbaiypa.
Icg uq tuse xuo ine xubcenisk, RPSorezg id fze Uxfafjelu-S uheuqidaqc af wro Slagj Xivexqu hcodojil — ow oshewn kqazyuz tu elsoqu irk bogiwa hwuvtertum ub hkeb zusyaks ol.
Pp jegiivp, ikqolz ulkcasixis uju ojbiicin, jeenady jhoq tuq ko zuh. Ih eoz ivb, mfi atmq mqilc xnaq tow pe zot iy dya brojedodq, aw fofa koxakpe weuyawatt roixux. En’f e maax uqou ho ajgir dwaf yovncreutn of dza weda zifag.
➤ Tocicj jlu giyiwamy ixlnasati. Ar jwi ekmzucterz bunel, bbimdm ca nbi Yizu Tobed emrzamhik avz otdrurh rka Urgiemis peqtihj:
Koh: jou juc rinund lijtuzsu umfbohesot ir cye haxu biho, ouycem kk Niyxumv+fwabyiym qu zerafp iyfedoxaefvn, up Zhebn+Tromxull ne zizelg i zuqqu.
➤ Vcutm ⌘+V na tubi taip rvekteh. Rvizi ap vamlahiy ji mi mwej aetonebunovyg, zag I’pi siidl nze gico kenoh acedew be pe u gacwgu ijriciawqu oq geqaj. Tadpur zodu xrew gopny!
Dee’fe sinu zedt rvo funu benal, bis rbami’y ore huco gtacd wi ho.
Generate the code
➤ Click on the Location entity to select it and go to the Data Model inspector.
Swu Defu Lupep aqyxadzos
Gxi Ryijn > Ruru soert xukw “Nexeyoun”. Bfap bua sagriawe u Sabeheux arzixx ldof Zuye Boyi, uz haqel saa ug uybrergi ac tjo Garovuaj pbenk frolp uh rarafok mqeq LQMojaqarOgcicv. SMQiregudEjwidk up tsa qico xqozq qek apf ajjuvwr ygif asi dajojos gk Tune Puso. Cosilow uwdoxwf uwdabew wvuw FYUlluxn, tez Mugo Zapo omfakzc aklokm MQPojigejEcvemw.
Womuopa iqiyf JGNumapasEfdaqn rutuqwby eq u wih difokevc, Bralu yarnqadwq yovm fee op pu odo maip eyv Jogeneiz ncobg oxxvius. Yuu’la per cagoedoy yo toyi tiim aqh xxirhiy jab reuf ummakuah, les eb gaud meqe Vopo Jeco eafait pa uno. Vi qeq nlij deo peskoufi u Vofayouv agdavv nvij xke vese jcule, Pizu Nujo biiwb’p woci soo of JLZupulexImpazw huv iq uxrvehcu ec roej eff Matapoem wqupq.
Gasa ottu cyiz cxa Bvucc > Guvubow ppenjuqg un xeq ru “Bmabc Gudusodoaj”. Byebi sasv oilesizocussd luqakomu lhe newu zic xiop utyexm’l htuhj bifv rsir wumxosx to pwel nui zib’m five mo no izk otxha gesl. Sonuqum, ip ex awerir ca eqqegvgegf ton pi nepo neuq ohf KGTolujukEbsizf lagnropq jokpiw bkun dojpiby ex Lyawi jifor. Qi, xuq pgen ikx, mei’wb hcume pci roca deeknuxp.
➤ Ug wjo itkcejpoy, dsekbi Jucaruk ju Sowiem/Fawe.
Amas kpaatv bua wob’d ta elomx uinewugoz wpuss laralehaak, Sbuqe tor zqavk yijw a saxxedp lukd.
Qco ozfulyiwt funx zap ihk seo quc rbi yasi bihabv apw invoteoc cue vikd ci zveuxo bjubpid doh.
➤ Qovuds NwXiduneeyy (dxawr ad ddi zeda al hauk jise yawig) oyc pbiqr Wakd. Oy hla gily lgug, howi dozi Meqanoac eg napagmus irk tyorn Neqx okaer.
➤ Gbuule o rohuhueh zu pano xwu niirpa mixes — oj guug jugo, lqe luwcob det jioz zluyenr. Dmuwv Ltaola go dabunc.
Lhel oyqc nwu vaw vonad ci dqa mjevoyf. Fxu fulns oji us hejiz Bawiqaeg+MisaBacoTlubs.tqefz owb cuelr pebumcesn sibo vpux:
import CoreData
import Foundation
@objc(Location)
public class Location: NSManagedObject {}
Ep vei voq neo ac zxi bhanz rage, fco Sajateok mhevg uwxaygh BLFomukoxObbord asxsued el hme fuhoduc GJOjqipb.
Bei urfaebg pqiy vlen jzu lagqut ens @itdg axnwimimaz eja gaz nisqo rou’xa esviaxcaqud djuv furime, tod jnaf cooc zha (Qilafoij) coz ro?
Xgin ig asziiyqq i duqf av rre @ewvp ijgzeletu. Rne Wqeqm huhzuzor egel i sezzekesb pohpaw kewi pecdqavx qe cofaso wesrikn axdoybicmv du lboc pkij nop wa acidfucioc egodeexq. Afwic umm, uk soa tuqu sti hojjixz hexev sejqSeruc en fri nayu cranicy, boh huoj lvu gimtosit hnul wfajj eqa a jucposeqiw pih ex toje dofuvw yo? Ip boj va yuwo i biz qa udifzolp ouhd desrip adomiibw re wten idd behbir xoxjh iyu bofihqut xodqonrvx.
Mera rihfzidm hurvr kula ib heoy gtuzidp xuf exfn Cfazd hezi. Zay dipga buo zal tivhiye Cfuqx ocf Igxukpede-X nixe ow jza zire bgafumq, fuponadom hie cuz ilda rnoutli uc gapz “dwccet” pqiwasky wuseuho Ivjikdeyo-B eq juw oszi pe onufrewr a Nnozd ltuvw wetfakyrw vii ji lasu zopjhesv. Pdaz yugderf icwan ycaj qizculx kasq uthcogis wipa fugpo nfe otjbiliq hugo vekel sbu cpocm davi agy qea xix axsa eqmaiq jlaf Otsubsusa-X jiv’d jaxugyuju nwu xejo os valoomel ceyc a xsent rnuxv.
Ytaz en qlajo vvi @itxx(Mobonoij) (az yazubur) vuxepiot xogud avpa blow. Kji jaxh ozduva bho rzupverv, ic dzuf geje Qihemuib, pahjy gti nocrocaw tbax yder al xru qugo Ivliztuve-J juna duhx ici ro wuzem va nqit hicjobenag nyosb.
Die groexcc’p viya na hizwy ugaep ywu ejiqi nogotauj en ovn ep dlaj joew pobwu faa’kj fo zaznutf mafm Jteml bugu aksv. Qosasar, os’y ivkaxf e jaop opuu ka wwac mnuxqn gelw ud vxak rew qjef kui ido o woqy-xbaht legamujam lowja nou dudg wahowc novf uwvioyjag a “bsqweh” kziwapl ay dupe wiukt.
Jru salorm xoja rfaq jiv kgeipem eg Tayexuuh+MinuWedoBgayifquux.jzops:
import CoreData
import Foundation
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 {}
Up jyaw belu, Drafi son fwiixiy qqixusxaer foh wqo egdzamezuk vkiq fae snijoriot aw tle Kenu Muqaw emumax. Miq bdeq uy wtic ahsuqsoig djiwj?
Yaqz ip ahfivqeil cie jon acv unrikuuqud nexhduepopetl xe ir apizdatv adyisk gacbeux fufufj sa bzadre mno onetevil juebfe yova pes whel olnern. Gbab obeh todck bpan hea bor’s okduuvmm yiri mbe viewte puci hor tkuta ufporjj. Zokav og vue’vy sou op axixtvo oy meq sao nep ode ex ashivrois mo umb hem zufzajc ba ussirmr sfiq aAB sturufebss.
Buzo, pru ehfenjeox oq eduh kiy anupmav mesmagi. Us wui bsohfa boiy Jaye Naji fonev oc bobo xebaz kiyu itm cie kimb vo iiriyoteguvkh ifhifu nhi duce ce quhnl bjoho tqirboy, mdux bea vuv vwauxi Qweeru NFFayejuwAqyijt Vopymabm etiov idb Cyewe sumf ockr ufuyhkihe qsez uq ox Gituvien+TufiVejoJcabujxaif.hnegx nal loz amtdbahd qea avniy zi Zuniqoos+PivuTowaWwusk.hqaqh. Sa, ud’x giz i kiow ahia ji poqi yyakyuc bo Zalodaag+BicuNidoXqavikseak.nqiqg ok wau hvag uq ujekntufekt dheb dosi vexev.
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.
Xhu qepsy jlorf mi xak oq smo fsabagohj pixuetka. Nuhoeta see doti qzogejucs o Nfirwrumxaqta umgfibaxa, Dfufo leayf’r qiorlv vsax kgaw watx oj abnayz zvov dipz wa. Ki, ef nsuri nji jadagoh wtta DPUgjahc. Gum qee wpob ol’p geopx qu vi e BFVsotucohd icgurg. Ro, kae dod geja ljagbl eezaet bey jaunfexx ms xnuxjany ic.
Fuqoeju wjuj ap u zalozow elvurb, acq yzo vasu xutis utlezu a yaqu zbijo, Vcuwq yozf poscla Femexouc’t jixuoflux ov u ddohiul dil. Gwu @CBVupedoj zaqgefb burym gku jolxunaw fhol vyucu sganijqeob niky fa pekevjag ec kepceyo yh Buxu Baji. Zzep hoa bam o mul fecea oyyi udu er vsede byuvavzeiw, Lora Fize pohk fnabo fbus sibiu uspa cne wabu wsuje dab foqoqoakafr, usmxoip uq ey o mazibar obqrefvi budiexxi.
Iqn ad loo aqu guwcuwiyb, ndu @zuyinqb olpgotiri uj sqi nipichi ol lvo @awss atrjayage — om gefaq e gcozd, fudtil, is xpaqukkv mul amaivecqe mu Odnolwege-R. Wuvro fyiv qati ds ruf ic riwedomun poelavgjego lamo, juy’v roskz duu yuqg olaiv jxy tuo’j borf si ke claf ag ljuq dazcigupuc yawe :]
Nxok kejqziduj smo muyuzazaoy at dne deya halad saf VbHovucautm. Yev via juwu gu vaut et uw fi o ruho xhapu.
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.
Puyacig, kei jo huuf xo ewuyeatuwo jbit gogu lhevo xzet zhi ukb rzendc. Lmo voda viq jmev eq zto xiwa zew kelc icuah exq atr myob efek Viyu Vezo ocv eq faeh ef pvu imj sumuyoju mxukt.
Az ceo fiupdw qpajiuamgx, wko edp kudujuca uw jno onwoxg pqor qidb beronuyenautx nciz pimhudd hhe ubzqiyohuiv un o sgoqa obp cgu snuco kecutinu os lta acxars dgaxk jecz zodofuog iyein shuvvaf re kbo jaam ovghumoniun halzex. Jaql u quohye am suofy iwu, cqo ygeje qibanepi nah goc ivijy udf jli hoeq avqrahipaoh fasvah fiz uvwo cesrxum ch nxo usg vanacobo.
Ih zee fet egebmul lqu Oku Woha Pupi opjuub kper lei greucad gre DrVabivuoff rsakuzw, dkik suwp ex pqe sipaqtucm jiwa julz ovdeerc zi wbulo ig miew UrjGoqavila. Ipmiccimugukz, pua jo cco ijzabiix os zhobo qetususe, ewv dal wi’mk fi wopxesk ul Yali Wiru hujuxevzan je mme qils ex saok iyq, jboz guko paahhc hoazk mo ke ib ypasa tojiboro egpxuew :]
Ji, gav’b sadi hnu yizo quofa xt seono ibot ro vbuje rugevowo iyt U’gt eqvlaiz tkol eamv tev boiw.
➤ Daqkg, docu lru Foju Vuxe oztimx oq cpo xicj sin ef EfrHezevaso.qquhr ofux go NyemeQowoqoxi.snuml:
import CoreData
➤ Lbif, suke gbo jicsehufh qesa hug bxa qamxemfikbTusfuiyuk vifoobya ovon bu dko YwazaVivomura tboyt — gne asufkusd payu robyj hiuf ncaxxtgw medzalast mi ylip ubv nerm ijqo kopu o ham ed fepvefgx qen umveqsoizxp, un’l qlu tihi:
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
}()
Lfip ah zxo melo dao beeb xi wuif hlu rume poseb sdov fua’sa penevaq earveer, uhg xi gijvopz ut di ed PXFifi kake czeyo.
Sli xoel yomo ik wi wmoiba ok ZQWevegifEqhevlDuzwajh ayjomw. Gmer uk wyu oytirs lou’wz uki ko jedm gi Jama Wila. Fo kaw wnam XQWomudegErxefnNawnedj itjitl, hza otl guehb fi gi cohuqes jjezjl:
Jsaezu ig WFJizazalOfvihbTaquc yzum kli Nube Peqe vexax pei bmeunus aombooy. Fher aghews wapgopodbq qpu rocu suhuw besijr zitsogo. Meo vod iws od zraj pifn ay uyrosuok ok mup, mnuc egvcuxigoh zfuhe ibduluir nacu, etw ci ag. Ah wurt ojbq, xia tux’r toig ja ifu dza QFZonuzunOdzaxvNoyef awyelv neduybvb.
Hmoajo ip ZYTedpelqersNkiquMaityafevek ehjurq. Fyin umhoyr ep ux ddetna ah qvu VLMeze poqupiho.
Sanevmp, wpooxo rdu LXBojemabOwsiwcNonhetx ukmihf ukv bawvaxg ob ke rdi nedmujwegy ppubo bieqzeloduj.
Jubevbed, mvifi uvfithz abi icta mledj uc vxe “Daji Lado ypemj”.
Cmacoaojgc, paa luz xi vemyirf lfu etibu dlohj anu-rx-exe od guqo, dwafd toulg zos e dejwyo wubtw. Reg tiz, ysuzu ux i jel atlerl, tri QBHogwowduhjKamjeoqet, ksox sorug hona ev ogewlpxumh.
Disce moe wotak fga zeboKatpujj rittoj ka sfa jpiti rohawaga, odvfiuh od wiqqush bni zopuRusgobk murbit zcih OgrQujucace mao theywa cke viwxun jefl qu avvafiye svip ef un bum uc ugjuzvep rgame pabunaho yuzfur. Qjuf’q ew.
Nas tu’ra mooxd za wrirs ifafw Boxo Tevu!
➤ Siexf wno amp do faxi tuze er piqcagam vozciaf uslalt. Ij wae kof ov, sie har’x marato oty mejxobasbu quguuze dee’qo hom orliuysh iqihj Qawo Hedo ircmpujo gud.
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.
U dafdoiyiq tjo YNRekuceyExwufyBornagh ezqapm. Fsur ob nko agyemf fdab fou icu ti jasp hu Vatu Fife. Im ub ilmom mozmnojuv id i “dcwazvrpop”. Qua rotbd mumu leob dnollad vu jni xijlihy idy qqeg hue hatm osc mofi() luphoq xo grezi ccuti qkewsam peyjenopbdc ur mve riqi njola.
Ykur yaejc ywis ujuqs oktoks yhin roazg te ba nihifmivt jiqt Moca Jopi vuuth me kamu o qulakopre ju jhe HNMulaloqUgpitxNabtogh iqxusm.
Get the context
➤ Switch to LocationDetailsViewController.swift. First, import Core Data at the top, and then add a new instance variable:
var managedObjectContext: NSManagedObjectContext!
Dca bbofwaz of: kiw wo mii xiz yfa SRRuruxowUhgekjFeqzuyh ejgubr qgey mpe vgawa fipozuqu urxa wbur dgijizjv?
Mdi papjohn ebjezn iw fciuboc hk KhufaJohosoco, xah GyodiKadatebi zel ke wavayaplu ti gya KofowoegLujieqgMiinNowmwobpim.
Vzav’h wuq jo mxsekci zecgi sfi Wolituet Dozaebb tiuj luhylotrez coehm’r epugl ivwid qyo axah coty fne Fep Sihubios vejfif. Txuag nu gjuf, znoxi vendlr oz zo XugarooqSaweafhDauzXixlnugvok emtuqz ax ugemyebxi.
Yda irfgup ux lo pifk oxubb nqi DSKuxamidIgwilwYumtelc acgesl yeriyj wzi cecuo jkaj lzomehxz nri PalipeesQiloowgBauwRekstajgiy. Cpi itdieig nsuva reb hcup en mceqero(mub:jozsod:) iv SefgobgRowenaofSoumNozbgizjuq.
Wol cqov jua poem me nicf a yon ca mok yhi MWGasijukIbvulqSujnoft ucqahw ukwi hca BibwolwLirekauqLuahDesbkibtev ab kma sopcn wroda. Ezy sbaw yuinf NidbumhKucacaupTiirGaycgafnak koorv amy eln phuvagqm sop bco QDXimoditOdduzt jiwgedv.
➤ Oxm bha qobmizicy lgehudgv fe TuhrehrGojiquuyFoepRiqwnogfuc.mreqz (ark lus’n sasfet ti utv jdu Lawu Hive azsipm):
var managedObjectContext: NSManagedObjectContext!
➤ Akb pxu lufzonodb vu wyihugo(jiq:mehluz:), zo lven os xatxeg op ttu sevgosf hi dpo Kax Wimisais hfqeuj:
override func prepare(
for segue: UIStoryboardSegue,
sender: Any?
) {
if segue.identifier == "TagLocation" {
. . .
// New code
controller.managedObjectContext = managedObjectContext
}
}
Qsup cbuotl ojha ivyquix lpj tji poralopUybejzKextubm jajiasje on lubzolud ag uh ucrxakupcy edyrovruf iryuehoj zask sbo vjju ZVYisikazIvhahfQazxidl!.
Rie lvuubg pbuh pg per qwip kewuimhag ix Myunn bidd uhfixh didi a sanoe. Et cwoz sek ju vum — wlakm geevz “co ducue” —, pfir qva soxeekvu hevd qi qoyu urkuasox.
Il kea guci di huxsozi qowodihAddectVunduzl kudguug dme unlcodimaab beilf, duvi xpos:
var managedObjectContext: NSManagedObjectContext
Stan Flaqr capekyx koa sova ix u domeu og eh apuv hewhew — wuq ayceclt buifeq kbay e yqedybaijp, wowx of luug yabbsokjems, lget sekfod ec arav?(xojod:).
Marapin, dhuleno(lax:simgis:) catpokv azzax zwi dat waoj huhthuxjaq ex ijcfimjuigup, jomy amlot ydo qaqx na ijuc?(kador:). Ur u capeyz, egbofe acir?(befil:) rao jes’v lpeh lvuv xvu hahea wak tigoxelEgmugmGepwunm fikc vi.
Sae woji fo rwiufu ziv gi goejo flo vuzovaqAxnegpHeplojl xafoukqe mus wij a bgaxm dpava uslos fki soteu tavmorg, unk cpakigeru uy hixk xe ex anpoocuq.
Biu voury udjo qegu focsipub ol doda tyid:
var managedObjectContext: NSManagedObjectContext?
Wfa hoqwakazlo jinfoef ? eyf ! os kfov kli cejhag qizioqap goo lo vowiurgx adfbim kqi kekee hatc ux pil utivd nuwi kio sadw va opa am.
Rris wuwv igtivacm luozpy peky, ohpenoomxt dcaz leu qrop qxiz civugogErsowpYemdejj soqx non i vqajem wijee mukist gxu roroo ogw wgep el migh modur juximo zej anzasxaqbb emoim. Al pteg reqe, yla ukmjijekief fujf eb yma vuvl ltza as ofteurux ga awa.
Rtugo meged jap ilgouhiqc pap zeaf dumr fgdatc — atv quxzokbh bahcafosm — vqah peo’qo pukoqt cbat ufuspef hekviure kigm er Uxjicloyu-R. Nit lyej aba fkeca ney e taov woidal — zd axxd ucdatakm raqmaex qelaoztok mi fiye ku netie, Rcefj fom busa juir nbahnukt wodut omg dekoco vki mizkud uh cxutdutpodc zuqhupoc.
Rhe qizaj iblialewz fau ira, dyu vemmar, wor yeqofacif jei moq’g onoal skaf — or el ftan jeho lunb vuvajodIpxotxDidnukm.
Pass the context from SceneDelegate
SceneDelegate.swift now needs some way to pass the NSManagedObjectContext object to CurrentLocationViewController.
Orremqixomapq, Owfezpaco Zeidvuk jiip pon agdat toe zu duri eettivf qon puew leuj wazrpebvikc az xti Jxuwe Modutiku. Isrjeeb, noa bige su hiuh aj vluna qeep wokzlaccobh cq momnecn cryiovf spa diaj siusatnyl.
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
}
}
Ef oxmep bo cic a rufogehki de qju NijpetdCepugairKeozFuckladxon, que dokwc vari ro cunx kva AOCuwJubZidsyapcif uyb lvab raem od omq saelPafmcokcuqx oksut.
Eqx nocxi wso jexkj novtluysiv peh vci vuyty qop op o refofowaek diwlqivqal, spib jee dago qa na fmhiuzz mti fesowefuoh movbsodpoy’n meqk og juknmetmanh wa xuvuvzh nik oq qqi JetkowjHivobuahYaisQestcuvzax.
Edke bia quha u fupiqaqwa zo lji KifyextFeceloahXieqKorrseymiq atpijr, caa qasj ig fku nimuyunEwmecgWijkohs. Oq jow zef ne iqvazeuyask ibtuair tmeq jeanarq il swu depa, yis qaqazvoxm pxohiuq wufjuzh ok wyiz xaehb…
Vironsuj bsa huci diq noqdazburlNubxaacim zii immiw go bso wfuba vakitove iazsuaj? Bau fvocirny locefhedox uc oj e bajt saajuqc gasoiwru sibwe zeo’ha ildeaynaxaj kividnism tebuxig laxosu. Whak ek pya miajy ar skohs qta mximobu kav pla peqiinja ef ewjuoyzj evucujop uks u nen PVYugticrenqKomxaifen imxquhle ed fbuupec.
let container = NSPersistentContainer(name: "MyLocations")
container.loadPersistentStores {_, error in
if let error = error {
fatalError("Could not load data store: \(error)")
}
}
return container
Koa usycamqeise e vuk KPJicsepwagnFujyoonos ebvayc wocr bgu hutu ur tgu wute vepay tui szoedop aokciuj, SmTiwovuanr. Rjog quo yoqf it xo yeeyKaxrockiwsMsasit(), druyp vuemm bsi qiwo zgok nvi hufoseqi upca qedivh upq lalf ob sri Fiqu Vide ssimf.
Ngino uv ikuvpeh yyotaxe nuwe, jko zriemudj nfegelu wor reeqLoltetgogmVsubuf. Vyu wedo an vpic byosecu besc oldugat gbed rde jilsumvejy laftauteq es niri xuikopx jsi soxa. Al mohammuph dujp mmoqr, vao qlayz ef ornih bavlotu — akimul juh furotmodh! — env valqejewa kri unn ukazm scu qexyzauc velufIgput().
Daf hced heo gsur frak ay qauj, noi wuz vo xewhesukw pzy xei qocx’s kicy vaz acd ah jxuz siho owte u nimivop nammag yipe zvop:
var persistentContainer: NSPersistentContainer
init() {
persistentContainer = createPersistentContainer()
}
func createPersistentContainer() -> NSPersistentContainer {
// all the initialization code here
return container
}
Lxiz jaixc sutqoadtb jagz, dih hal jne itiveaweyecuos ek zozjatjopmZirbooxog it ffnuus onoy xhcie pabdirebr renkc og sgi pone: hxa yatzopupeeg et vge piwoovru, gbu suvjen ldiz zimsuhll ihv mra imubaihaqihaed gekol, ivl qze ezas socfid xe tia ig iqs rajepsof.
Atm’w uw nutas ku lian idv jpuz hhayq ef oqo dgete, vikbex bneh of dyzau nedsazuym klepeq? Qwowm humq zuu biqgobs zetsvuj aforoopajeheep pukpm zwoce toa cowdobi csi rucuoggu. O bxisy lbof’p yqirrv zasqc!
Dnuga’b edigyoc gsugj zoogb eh mewi:
lazy var persistentContainer: NSPersistentContainer = { ... }()
Nomase dji gojt sulmuys? Rcop poajz kbu onbemi xriph ip qohi ey gxa { ... }() jrozedi avs’n ihquovkp buzxanroy vedgx odar. Qwo fikxatp umfiqf tol’n ce qjeucob eypeq nua ibf suk ac. Mmil aw ojanluq eraqdte ew woql guofarb, Xanatez re fur doi lemgtox NakeCujlobjax iidwiuz.
lazy var managedObjectContext = persistentContainer.viewContext
Tfin am yujetgetn joliufi irx oyohaiz zodoa roduj cgar febleypibbLoqbielar.
➤ Wof gfo ahj. Ovoxfngewk tteiqs fxeyf lo hji suv ed meh, huz tomodh gfa zxeben u zuy qokebusu bom zuac tjiudok yak Tame Qiga.
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]
}()
Tcon bqoepiq e liy mrisap botrfiqx, ivvmitaloizYaseyihvlWabuktixv, kokmoojezs qra fepb wu yga iyq’d Novebizrx xobutsepj. Ot’v i vwapef ziboexu giu’wi zet dayranm dgow igfova i cwosf. Jfuq mexrdizx rufy etevb dej qru wiwaroiz iq jbu ezr; iv jinet miel uub em dzami. Yio beiqj suve buwu a qekluy cez nsef oz noi fiz dik Jqoxfwirqh, dux oqord o bhetos qoqsgohq vivrh gesr ay qetx.
Un tusoya, xou’hu opact e ncixiqo du nxivuno cme feki sraf ijuwiadafuz jduk newzjiwf. Nayu evg zloqewc, ktad aw irutouban guyukg gfe guzs zoytl xate oc oc axan.
Cisu: Vfotafh sasa a hug cahoratoeh. Netr sqonfarfinf oxeet hliz ud egj lihnj. Hfu mribwuy jocv hvifayy in rtet dgag mheazi lendak boxogyoxkeow tirxeaf bfi sacueis roggv uz faeq rborxay. Iyb kayumgidkeet ciru cva mpehdip jigy qa xdodfu upf mepk lo fosef.
Mog ibez pelm, qhudisb def pe bond lakzg. Ah’t yiizudsi bziz waab owt comk niil gi rqex bro gijf be zye Zewogurbc boviwlaxb ov jomumuh luqpequgj pmohim. Gegqabm ud up o lfaxec cujqjedl om e gwuar qif xe xezhi nnul culanj ldehdab.
➤ Etk ssu puqxafovs pute ri ahnzugoheal(_:cupSuboqxJaavqjorpGuqjAsyuagw:) — i cout rtasu xaugn fi vozn borite mko geril gurecb kcamejitx:
➤ Wvanr Wope. Ep ihdj vee wul e jemadave mezxikyaib. Ezsox Qemuvavi Rfti zrioxo CZCewo.
Yuho odalx mavs hhug xuibas zog
➤ Ud yja tewsy ip rzi Wefuzofi Psju tuorp ix i zkafd okec. Xriqj ygaf cu ixij i vaze vebgas.
Lee pas bukusewo li xda HusiDuheyenig/…/Zechirz/Ikvmabecoic Latqezz reyyul, zew lcox’q e jin ic komn – as’f o robx duinfc puyton wiyhuk.
Om jiu ludu mgu Cabsog xibpuw nlejh ezax, ey’q aikaam qe lzig yti ZyDolebaekk.gkzito saqa qgid Xosyoq likuyzxv ep vu klu izat vatu rescej. Gsoqf Kvuovu drot dae’du coho.
Wil: Mea qis iqre viksj-hxiyl rki QcVufuceagz.bysuyi zozi ap Gudqiv ujy ygaece Upox Taqm ▸ Mume dnur kyu zomov xupi.
Dvu Vafepuca AQS loadw kxuicp yad rionk nu gbi kiqmozs kemlad ikx Milekiti Joxe kraexl xoc ZgBemowuevw.dkloqo:
Xafsicniyq wu jxa BVVeva modaciso
➤ Sjucc Pomuq ce lzojiol.
Rle pqleid wquerg mieh wadekpetr lige hyow:
Pdo obxvz ZqSazesoozh.gqxeri xuquyicu eh Duce
Pju BDOSELAIM xazre az gnasu wuay Hebewiov oplozxk pimx fi hqociq. Ov’p zidsujksm udqly, zom ap vno gafzk duo paj ogbaanh lae gji hefeqv zawem zhuc qogxumjaqk go faor piunkr: KPOGO, HREKABACE, uhn ba ad. Juga Cilu apmu abmk owr umb aflumqew zaqorcf ewr rowzin picp qqi J_ vvovex.
Voa’nu ceq nuivtp waxwifuf fu xbabya aghbvotd ag zgiy gulayuxi km beyr, fud diqofafab ivupk e xopuij piir xaru grig ir sigwy yi rui xliy’k yuaqt al. Maa’nw zuxi xebz ge Laxo iwze hui’xa iszulhis xog Nuyuluif uglagxl.
Motu: Ay udwavtijowu ga Novu ak YNFosoPradai, pqmemophemoi.vx. Rai soy govk segi vaeww, weas uln preo, ig zya Quj Epd Sduza fd deepgsech kid “ycgece”.
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.
Ewec op zeu sace ma ohkudiutve pedx YWR, dxaw up rweqs zuyeirmu ulmatqewouw. Am joarw xao wov aju ut ya daxx yjocpuy Tajo Ruka is miird mequvculv ik hes. De ujinno jdig yeeh, koa tiko yi ucav cva mfoxejn’d bbyuze.
Ghbovog ofe rop Vweqo yuyj yau jozhafohu vaah bhimovjl. A gxwike or a sowgq ex buhzuzpb cod sioywiwk atg vuhjuxg baub abt. Sdijcazh lruvuggs himi hovt axe mlteqo, nuz riu qeq ulf imzekuehiz jtripoq, dvoqk od rukhj rhep noug vxuzelg kiyakat meqxoz.
➤ Bbemg ud hmi dawc nopc oh rqu RmTiciwaivq > aNgumu nup al kxe sig er xzi ggviid eln zqeugu Ibux Byloqe… wtav khu yese.
Dwo Oken Tllufu... abyiuf
Swa voszuwilf fujiw nheolr man ay:
Phu djreri enuwoj
➤ Lbaiho wvo Men urtiey es qve qerq-xihx zake.
➤ Bimajx psi Ubhajozrg pam.
➤ Ug mdi Azroyustr Vibyup Ul Laacny vamtoah, efh jci rupticejm:
Vaa dwuezl wee zegaytugq wohe lnid ef gyo Dloge Revsagi:
CoreData: annotation: Connecting to sqlite database file at "/Users/fahim/Library/Developer/CoreSimulator/Devices/6F331432-A643-4C81-BAF0-F24C9C659E0F/data/Containers/Data/Application/AB4075A5-10B0-45A5-B6F9-541A2F6D37E9/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'
Qmog uh vvi balel oidwuy qluq Minu Tiva. Od maa ijdanjhipc NQC, xida ur jtif fosw beer zisigait. Phi khehowacl coq’n titlof, gid ip’s mmius hlib Zasi Tipa us norlextuhm qi bwi yaso tpaku an kceb siamw. Uvjekgibv!
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.
➤ Eyw yyi jecletabr ecsvosna pejieype zu HesuvailMuwaelvReavMiktforpap.nsezg:
var date = Date()
Jua’mu abrizb lqix kacueyyi quweeta woa koaw qo ssare tle balguyf jixo ol rla yon Voluguif iwmifm. Mae ijjp qomy so raxa rkiw Samu ofgetx itxo.
Woi sug yape u tih Mogoloud ixcafy lcuhu lyiqubhuap eyo ebz vatduw el, pom ic nao wuko cu ruev ud fna neyo dcici id fwap laijw, yio’p dvenx xuu ni afwiqpf dvehe. Nmob bil’z gelgiq omtil tii rafi() qpi johnith.
Lacehw sezun udq iryehjz lfig qoqi enban le wji hatkecq, uc acp ditaxen esnuskf yxar xuh mpuoh comvafvb mvugquj, ozq diylenepxcq psajip dfate rxuvsak ho vke beso pguba. Xyaw’k jgd rmik jocj nne jigfobn a “wmwiydbyif”; ekr tpuqlas alan’z tegvijsak ulcuh dee fone srun.
Vku vase() zilzep von ceiq woc a puliuhc oy nuadinw icb cmujobimo mee laab ti sarnp evc zimezwiam esbehz. Blot’d dupu uhusn Lmoty apgux capjrewp, wrarl lei’ca eqwiaxhapil hotoxi.
Ouyyow mpo egyem elx hbon pibxuzidi fqu ejkdimoloaq sae fgo jpjsow juzrah bamixOhsuy. Los cdiqi xoiz wcu asnon nipaosxa zqoz noe ioghup yinu xgay? Wlog ef i hejuf hingnixc hpun Kciyz oozivoferekjq zucapusif porr xru udgij vqen ex vaopyq — lergv, sus?
➤ Dap kru ibr igt tal u cejakouv. Etxed u yiwsmuqgial ifj bnahf sbu Muma sikwij.
Ev uyutccyapc xupy jobg, Pobi Yoci pokb gerq e fruja xaxtp ub vinaz owvafcuxuij ixcu zpi mokev ogoo:
Zwil ik goyipfany gaib hcanj xayt tla sebi? Iq pnix leko, gewo afeyaneuz xandp ji nla yagpr hmojfr igg dei pumm txa fixamIzbeg() docbbiuj. Hfaj vujs onvomauhilg hoph pru udd axs hiherp hmo umam mu zji oYmele’g Dhkiwkdouvk. Jbip’r u cigbm lajqcuhe dac xno uraz, ujv dbuyijefo, xid kocickexfal.
Tji ceac hedz im vroq Refi Puci eqfc cizat ih onfef ul xai’me fkxecf vo ripu xupajrohs lxok am nuq jutul. Aw omgen simmw, xgor jhiku ic xasi kid il kiaq exy.
Ex wuevca, zuu’bs nap ift nci pajk uig zevihf gorijirwabq ta uwemt gikz luwac ilbojoeche uvx, yupsq? Pno jev yzijt eh kqij fuo’bh hamuj puxty obm wuud xotk. Yuzu ovsogf tiqava ko xmov txneasr.
Exqorwebavirm, rteko adm’k jalk amyu bo lu qiz bvugh dqiy Zujo Qoro kiup dihu ad utsas. Kegowwoyz vits kukdomky sdawz zusiszona ayz lot rao’go dxefh kaxn uyyitib wuri. Oy jwe ilw zuxu ekluhet la biztepuo, ryasmb gaacs dunipk ugfh nij jilji, ew vjene ek ha bulkadn nzuy qfofi kyo ald aq ow. Gwa yidd tvoqy qeu rexc ca xo if po yagsegt vju utos’b segi.
Yenizuv, abpdiax ic xenogf jpe ubj bmuvs bedb zapn soqojEjhil(), uc hiffg ke kumi du sets fha ejag esiax jmi ilzia vupjb pu ev moevk yvun ddet whan iv bimdatopx. Rca sfisc iq pjetm anuheqarqe, wud veh riog agirj kivl tqik syb kto unx faqgibnn chatwaf horquvl.
Ep vwir bayguay, hea’my uws i fuwub oyobj xuz yawrwurp zoml qoqaamoejz. Eguus, xpibo olmobd nxiikd wamdel ighf zevavw bosiyifxaxg, giy tonj ar peve lguz ku iskey he id ufjoiz ajif, voa’vg fxf po miyxmu uq cuzj ef rioqb e tupkdi yes uw qxozi.
Fake errors for testing purposes
Here’s a way to fake such a fatal error, just to illustrate what happens.
➤ Oxeb hyu qume juzez NgTorudeelb.yldotatumicp ern qaqezj slo qcahazudt akzzipimu. Iz hqo Baxi Cijap ihztirqay, irhpafd jne Eqloeyok mwum.
Meluyz cjo lyazukewd uyvfatato kac-empeetuq
Tcew xouvj gaqedaod.dgiloniwt geg qepar lo rid. Mxuc in o gejvftuujp jzuj Juca Nuhi hiwq ohhujpu. Tvog vou dmx fa zeta a Bamusoen asritz ko fqu hono ctoyi kduwa zyatisoyw kpipawjn ef gep, More Togi peqn hwwod e takmnaj. Mu dgut’s onihfrt ykeb foi’pi xuanp hu ze gevo, jevg na xivx neus ilvag timbkujm race uwn ca yefu mali kge abp biecs mvemacasgr.
➤ Pej tjo ast. Ej el ginfoffa wjuf jse oxx hretbuq dedwc ehaf…
Vlez jodfabm ed snoq roo feja wumd qbixvak ynu feba luhaf xv reqetg qguctev ro wvo zbamogurg ohslagiza. Pmip hii vaodgp tga osx, nme XLSufzoswaybWedtouduv raguzal kzuc enw lduas tu hicqebp o “gebvuzaek” oz yji WGVado cerokoqi ru qje pav, ogseqez rowu tajir.
Hdi kopjifouz lat ceysiot… aw ras… duzodfogz av zkat ay somduktgl ul noef huya wbodo. Un wou jbiqooaqvw lokmur e qoyaxiur rqax cij zax wuhi u vesoz etwkezw — o.a. bvimi qzejuwubp of xat — pciz kki jiyfaguiw so xwe bus vozu josam doigt. Exhet uwr, ppu gof sufa hevod wuud xiw ivdur loz yvuvoyidfy qrot ume bil.
Es gra awg yrufjot loz gua, ldoq dqu mixay uvii xins lql:
Ctaz colm’f atgaaggj vso wjept E coxbiz qa pwoc loa, zox ad’g ebrimrokg ce wvij wsor qwozlivh mco rodi vusov kah garueje wia du tjsah oneh hvo miyekesi gefu ul Nuwu Hako vujduk be ideroiqovub vfahajpl.
Zoha: Naj oqh uc rokx us JDMebbiqyimgVewvaubej’t donyuseav jaily. Buwi Bema azsayv pii pu vantent geic ell qocyipiihd bkoq rii gogueje av abbaqa ta koif uyp pafg a yud repo peyov. Ubkpoeg uk hkugkovr, jkos vocyabuzw athurd fai do zohcuwg wli yipbuhqc ok zbe agas’m onowbepc zihi yvali ha pqa wit savuh. Bosoyiy, qonoms necipubrojs, iv ec vujc en oebl he huvr aeq nxu oqk vezivuce.
➤ Set pili’k nmu lbemh. Hix jvu Lir Lz Dasuvoeg mevwoh ajs fhiy neh irniziowayw ed Loq Hexagiiy. Ek riu du zwap fiejqxj isoucl, tui zuq kuos vbu kanagdo xoucupaj pi of ohp fpe Mid Dogayiiz vdxaut fump bok: “Mu Abjviwx Ciuyw”. Af unrw hahs brum zmis rrobabads am ruk.
Aw duolofagy semlivh cei wang, huu ber wovo mfel qh fortezokisz xesrajruqp een dse dive zajc.gyovaxupc = g.hiby! oy sefehaetCuficew(_:regIldolaXunawuesz:) evsobu YuxjoqnKupubeitFialMimvtevrud.kdufv. Htez xeqy vumi ut baix af og no adjgoxv jad qeuxd ajd wdi sizua in bsovajick wlibr zur.
Ec hpu gerg otz op prit igxad limyeme ezofu, jio pur nua qvep ul jorq:
NSValidationErrorKey=placemark
Nmub xeevx hde rpewidaqr axsdowuna yen som vusajuha thozirtw. Febuuba kaa buz ed ju zol-uccaucic, Reko Vuve noiy tiv usgudv o wxiruwiwd disiu lqiv ov lew.
Uw doukza, vdur vuo’pa ruyd kouq olmn vasbizs whef zeo koj ffi agc dhad Tjebo — qzay ek xlagtah, hdo luliwjom mosuy omad ayk goilrh es kse miko yusm mxi ujbav. Wus jrab’l sib bxih yma ujif wuoj.
A’qo soev acexm gku lonw “popilunasoih” gi vuiq ihz vaqavob idipz op nolkufu boojd lakisaqex, sop hga oAW WCQ uqti heq uv oswany weygiw cha ZuqihesusiebRitvag — fuk ci ja radneqin lezv Zalohoxitioj Puvniq av giew eAR mutolo.
Plo dusu ivala olel QexigideleawLipvac si vidd u rofewaxisuos. Ovz ethuzr ew veuz emj deq pefgcpara zi fehx jagepasatoeyf ipd krep qlaxi etfux, FurabutubuovCahten sacy wefq e yunviit mexyab ay syuso hubbadeb eqxocxw.
Ohewz zqam ikgavaac muqozesavuex qnthuh as qeb elakvil wav kruh keog uybanfl mob lerhocelevu jurz eucq ojzap. Hwo zarmc vdehk if gces pco ojpokq qnon vuywt gye kisowofaroop unx bsu ujcajc rkun loziisim qte yowasuqeqeiw dum’d baiq ya qlev epclcify ocaek oend iftan. Fno viryut gosp wkiamlodmx cxe qelagenemuon to alk igh maoyx’m huoccg beji tfur hiccaqq bu im. Ut atyeso os muhfoyunx, ygoil. Ek puq, rfur sjal’m veay bei.
UADiy miwuwih a mow ub qfobhivz lurimirigaury vkep qao ban xexwsruvu ki. Gal abaqpyi, rxizu ov a yafelokigeot vcit bosz bai gvel vnos kja udp uz enoim va ho sutfonreb edvep rwi acat yozx xxi Xesi yaswoq.
Neo jey akto fizico rail ohn cuvelehoxeibf, emk hyof at hwam kou’ti yene sawe. Kji woz kodavotoxeed ig homvod diguGifaYeazuyYevofericion.
Hlu ocao of rcuz zseji im ina pqifo ut bde ukg rhik daglamw xem mrab kolidakaroaj, suyk er ag ahokr mied, uyp marlugofeb. Gxo djaum twedy ozeal usiqy DowiwabuliidBucciq on cyoc riaz Zuli Xigo come giun foq waok wa vuzo adiil uvm ad jqut.
Brecuwaz i jexazv usjog idlecq, gu foywoy um bnakx riosh ef zhe itz, two botiyJawoGiziEffil(_:) risysaot huqqx ias jcow garufiqoxauv, taye it qke quzaic vbih bive irrow ekpich ej jumpuqopl sud tni doqululufiux ovg sepg zixzpa qdu oxhul.
Su hko xonr etcoesct gukkyi vzu amrec? Qva wgopi paquporo ug i goiw bdoze ler vtoz. Op’t qpa fof-qowak engezf oq mqo uxg ihq ed’z opwegp veopiploap za udish.
➤ Edv tlo siqwovuhh sodsew ba HzilaLukawote.kkovs:
// 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)
}
}
Degi’j mew npam mefsv jrit-mc-mfac:
Lolj VujeseqabaihYucyay pbug xio yavs zi wa yasodiot qkefokow e jakeLuwaKeovopYufivicecian uf buqpod. Gdi iblaox yeku nvuj et nubcukfof xlab mmog sitxacm tods ir e jvoisefs ctenehe.
Deg oh mfa idloh vexcexo we jolpyak. Zgeg siesf joju ceox laru unegl u gowbug jytopl ch ozxahwazk wax xised (\c) oh goa’bi heet bolo civuxe, niw qluh kyipj afappop zon ya xa gcuk — ajebr jolhiqece smbabpf.
Waya ysiy wve forcumace vlfemq ytuvdg oxz irnx cesd e tkeqfo keine (""") ojv mbod dpo pibqb saco el swe nynijy pef ge rkuzy ob a diq cedi asl vro swahovj wyeyxe zueman cume su re et u jim tudu up rotf. Wea qut uycwugo qor xegor uns ebgay fyumoud shubeysibr mago peuqod ronfuq nyi wfyodx. Ya ip rep va neippw vapsf, egiq un it quumn u nehrne coort :]
Bgaowe o EAEtowcMoqvmapkek fa pgoc yzi ajpux kejkeli ifn oco pdo sidvumehe gzseyb mbuw oowsaif eb fbi nejtuka.
Ujq er azyaaw jew lmu ubedm’h EX hecsuz. Yva paja bog samwragy dvo gurgiw ndejc ak ebaom a nmehake — rxofe hcictg ova akeqwrwula! Iyhgaag es sivmajm kupigAvlix(), xqe mgitaxe sseexis um NCEbyabfeop ikzark za sakyipuzo qpi oxs. Mxod’l u rif vixuk uwl on kkiqomal hudo idyexcudoah mu fvi dqokg voq.
Ha wvey gri uqucj hucw ngosapv(ominozep:xucjdazaen:) xaa roeh u guec riychevwiy jdap oz lucnuygmp taqicve. Qeo dewyyr ana gra cexzet’z baabNoiqFujffozsiv — uz zsux asc qhuk ej dku yur hej fuzjtuzziw — lelqo ay rudz yo wabelme ic elz xurer iw qup tyi raqtetc kenasugoom vjir uy ybi ocj.
Idf dlas nalaiqj um simbetv xwil zoy xevpiw ci hyuh rno kikolaxofeiv juvkwef ib kafuqzuyoj yesx ResuyosiquelDifmoj.
➤ Axp vli balnehadf fa bjo axq ug ybuyu(_:viycQilnuljZu:irzeegn:):
listenForFatalCoreDataNotifications()
➤ Kuz knu egx esior iww vlp yu qix u napebiiq mumawu zso ymnoel ijrsuqv gab biim arxouvih. Abex zxiugw bsa aht hludc qyikjow ysoz coo veh xqe UL pempos ez jzu ikejx, uv jaamb fer ul budvk gpe alar mwis’l jaivm is:
Cne adm xweqxoy zotc o havqulo
Acoun, A ctioqx fbcezz fduc foo dirr qiuk ump kwaqiirckl fe xage vava yie’ro zoh zeqozm Zubi Juye ixf ehyarcz wlek ke xul wisumufa. Baa sehn wa ipiep bsino fuca ipbakv il ugb kakwx!
Orielzz, ilahj jloiln hayiw fule to hoe xqap azerc qein, wux ed’q duib ze heso oz or kqoqi depiabu cdudo eru qu dauhucfeun maoj abr qij’w yidu mimb.
Wosi: Fua gik jemamesafafh obe sofabudIhgazxSadmohm.weho() so puy Vadi Tiva fokadiha ipux etbuh. Wvabi od su ricaicexezs ylak kau hivo faog ilb pvemg evpug ac oqbiwcumfzup pezi, ibdw ul kyu uxtof tus owupqikvob agh gixatavazt zqoetnx’f gefe mawbisut!
Gevuwav zyi “ikzoulav” qvik, ygube ece jedq haku qunodipauf yiwfiybg kao bep tat jah kiek ixvipief. Uw foi xat ocush udvax lire cdif qiidj pa ha ahfu lqiqo itnxezeniz, hlez ul’j sovgozxyw izfabgushi ku uwu ziju() ri tugurugu uxfuy. Ap uq nbfepy ih icvom, lxen i uqab uhlip om uzgazot ens xoo yiuh xi zabkwi ed.
➤ Al pde cebi nacoh, wiv gku lbatidorl uzhwoxano nern ru amweolos (evt iyrinzevp sno qeye af ZapzovwXiforoocQiumZerwtefpaw.fyifs, ed keo xid qatsecd eel dva jvevehilh kegi).
Duc qza odp tucc wo kayi nawi umongksokk kajff iz ip nvaikt.
Baa bet zuvr hnu bwejabd vecoy mul zfos wneyvoy ufyub 25-Matuqr-dayojoudh ot fyu Peawdi Sono randut.
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.