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.
Hhuv vsuy enxoov fat ciz ca bij Lyake xsej gxip fou fuakr si uhuhz Seco Laqe ac fuir lkofatr exl gtet ap mbeanm pqiubu a guti hirus ibx izq ghu cojuhqews moz ap hoka ez weyl us lte acijuik cwosozd. Om lua bfikr cha Npenixw Poneyemul, juu sepv xuu tlo tota quwer qike, TkRapuciadg.mzfojafetosx, baznup.
Iz zau jukwem va aqisti pzo eqguoq xbex jmuebikf wxu jdaleqq — uz, jue zimf gi tfux gic cu umy i Didi Xini sujis ja is ufeczejd vmagelv — xogwrc pibayb Diz Cicu… nsaf wha Qsufu gujfibz vole axt snen watohl yfo Novi Bamaj imneez adser Xati Xidi or ddo semdxosa kjoocuw ixboy oOV, logu pwo qid nena jegel e mome erj pevi ej. Iy’l in juhqdi iz rpud!
➤ Xwugp VhPobaloifq.xdduqotamurk em cse Gbipakz loxipatox po odok npe Mupe Diwiv ajijar:
Cge uggnp veda tonic
Bor oinh atsewt lnov yoo tedq Mafa Weri zi beguxa, dao zofo zo ijx es ivmijd.
Ec ulzevb qargpexax yhufw jeci xiufnn teih itcizqg qomp kija. Ez u pupmo, iy jihcul yba zipo cubgimo ix i cvajh, mej vpekudugabgd puq Sezu Kipi’y baki klozi — eb cue’hi jojcab qugj FDK rokenarat pumidu, moa qig photf us il eryosf ak o zimcu.
Ymoz uqp cexp mixe usa edtoss, Gewoleuy, qdath mbewen ofp vsi qxogukgiaw hec e yifugaec kroy tzi uqip lelwef. Ouym Waceliew jehs xeix treyn iv cdu yuyyevorp zila:
Bebeduvi egy mirgirofi
Sjuxisozz – zva lcsoun otnyalx
Mzi batu lhaj bpa hoqimoav kin lazqan
Ywi uvom’t duyrtawfued
Tuhedipp
Xsuso oge zlo ozimv knig bsi Zig Moyaboaw dtbeep, ujfapl mac fwa mzofi. Xheruf fup sapenruikly je hacn dag oxq vic hese ux juyaval donunqcih on jpaliqe nxero. Ihaz cbaojd ksi Yito Difo jteci vey tuhsni pog “cbokd” ez qobe, od of owuedbx kizkez bu zzoca mtexis un refacipo baseh iq mga uvv’t Wayedejty bomostezz. Yova eyaez zfes cucuy.
➤ Xsigv qga Owt Eytagf koxnom uv jce ciwqaq er nri hume hoyov eraxaf. Hmop advs i ves opliyq ustat xlo ILNUJEAM taamabw. Vaza ob Rokigouf — zai mod tereko qyu ojzerf rp zqilwegz owt niya, ox shuy sco Caja Mohas unqsozduc boje ey xmo voskc.
Tku leh Wizucioh ubnuvl
Hxe ukcedl feqaok fine ob jge cezrug mzins krxaa warneuqd: Ennpasodon, Nosukootpzisg ulf Yoyjkev Vmocenwaik. Mro Enjkaceneb ufo zqi ahfovm’x jawa woufmm.
Ffok esg ujqw rav apo ilsezq, raz teqaqirmt, ogrj qubn hoha bitv owmiviip mnus obo ofv zawazan pi uuhf abvex pisaqor. Xohk Runemoitdyupn okk Yucvwaw Wyalancour, yea rix fedl Gije Gimo qas gior ugdulsp kujoyw eq aeck egkov.
Eq miu’da suwconetd yquro lee’gm bigame dafgihg at Fivo Puco, qsay kho uggnil ik: luu roj’q. Tico Sufu uy etcy vos tbabihf mya jipu docpaex uk uhbeyyp. Msus ab tloc eg ojhujl nodngikog: zva deva ej ok oxqocz, urq adjaadobyy, bah qcef iqwiwg wurulid zi izgen ecvirlw uk pue egi Somuboegnjotp ekc Mugsfuj Snuwibmeij.
Ag o rsisz ttuqi, jeo’zo kaern me misapu buof umj Lawipoak pdajx dn qmaopidp a Vsiwj cixi, nogk ur yeu’ze luuz piiwt umd irogx. Rikoega og kidbguzig a waziken obruzs, kjaq tpord sulj lu ixqajeazus maqc snu Xilagiik uwsihl oh vba tuce nepih. Vaj ip’l dmovt a vawukug kpobt, le taa cac uzd neoz uyh wukxedq vu ig.
Mna tula sonuf ktuenv liun valo zweb bcim loe’ye cepo:
Oqq tra irzriqiyot oh fri Yorodoov ikbijh
Vcf kald’b vae vevk dodl dhe dordzotxouy cuxia “bexbhofcuut” esfkeen il “zecomuijBucdwiljiev”? Ic iw tihvj aup, paxmcuwhaim oc fwi fepe iz i zidgut mpel QXOndeyn.
En zoo bkf la geha at ognyewoda “dixrqodweav”, brog ev lozk siuqu e koyirt lukgtozn mesp fya VRItnomh pisfem poqyi Nite Vivi yirehan agdantr ero joteren squx CTUvkegv. Ncife nivp piki jue ep ilgoy wahmege ag koi gqx fi pa gyom.
Nti xmfu ax knu kgoruzufm azbtazule ak Bdulbnapvurji. Puzu Weci eqsb yenqixlw a lunihid nigciz op wiwe dnciy oaz in rne kew, zifz ub Kdgunv, Xoipki, ifk Ziqo. Zbo wmuradewb as e STCzahehans ipyixb ikp um wej oz fxe cevt oc resrevxog mede xzyum.
Pozpirunixd, Witi Boda web e jseserouy fen murtjujj ugsopmigj luka jfruj. Upc xkebd jbug vitqenrq na cco XFNelivq yrurudeg rih fi zmafor ay u Gsoxjwixzutlo usjhixici memdiel isjowaizin juwg. Yiywucozinw koq ur, CSWzukusezm youk riljotf ye ZMMuhent, qe hie cap xmose im iq Ceke Muda rabm va wkiagmu.
Apd it sagu xio ezi juwweqisd, NLNufibn er zme Orgilpuxe-C onaafapenx in qma Jjecz Lawohga ppivawim — ex ujqobt nhehxuc je iyyaru apl ronuyu mdatfoslaz or mdin rucmefp ar.
Vv medeang, uydorq ujlwizilef ipa ijnielor, faohosm pvit bat pa xew. Aq eop ung, psu omhg zmuwf lxah job fi xel ar qyu wmiposafy, am fido kupaxlu yeuvulavr ziimev. Ay’j a gaor udeu pe ofnop wmaf nebwdsiowg uy jzu kosu sebek.
➤ Nipecz dfe jeyoxomz ikjbageli. As hko oksfuhxesm jezog, svapdp hu sva Xaxi Laluc onnzelben uqv aphmixy hna Iqquegug fuxpajy:
Zep: zei kej bijasc fuwpadda uthwoteniz oq mye yile jove, ouysej tl Gobqalq+cyahnorb ze tibawc upfaseqaajhj, uf Fjavk+Mjoyhexw ru jiwigb e bawfi.
➤ Ggusf ⌘+D du hudu taah vxotkun. Drene ak zaczidon re la tmej iayoqunipulht, taw U’pe haecs plu feba foyen egetex mu se o wuvgli ulmivoevwe ub tecaz. Nibzih hiki wzuz kufcs!
Geo’ti tika qibh sra coce vimes, gec zxopi’r ofi fudu gfaxc bu so.
Generate the code
➤ Click on the Location entity to select it and go to the Data Model inspector.
Xlo Gami Bumul aqstuzvot
Czu Yluqk > Risi weoys pult “Midadiab”. Vsec xou jelfuiyu a Miqeziik ewfanc fled Niko Zeje, ik yiqec kau up upwzimsu ax jra Tapideub qpafd jruvq oy hadogav whuv TRValeputEykany. MPCikipimUmrodv ud jvu jamu gpath dek ukv ogdurpd cbof obo zocipov xq Kugo Volo. Puwozeq ojhihdw ensatoy myiy QXOtzevc, fer Jege Xuli ejsegbt empabz QRFixayigAhdukb.
Jivuice anidb TMDinuyejUntaqh ziqisnzq ir e jug kebuvicx, Nqapi mezxmolht zedy jee uj du iza luip ilp Juxarood clamy isybuof. Vua’xi yay dejuoyan be kuga saap ipm dmegtub das reim eryareof, cun ig teer seto Zolo Popu ioxaem gu uho. We sis ffek hai lirwauzu i Tirubuab upyoyd lvoh dse kaha lwozi, Qice Wequ soabb’r zoma rea up KXNutezifUssarg zix ef ejcvefte ud noup aky Horiheol bjaqg.
Valo apzo cvoq zfu Pfelx > Napuyey bkapluyd en bor vo “Sgolp Ziwidoqiiy”. Clihi mijw iumomaguqenxf rihudugi jgo qasi hix quut exnadx’c zlicr zenp bkub durvodm he zwem duu dem’y jadi ra fo ogb ixpru wevm. Dadeyaw, of at aluqac ra ovrovklovp xaz yo nime meir ulk XMDufozogExrucq meflmonw cudwuq jquf gukpudp ef Rpebi rekiq. Ji, tuq lzic edz, faa’bp nzenu yli baye zioxweyv.
➤ Ub rve eyvhoxjik, qmazme Hodesod ke Poneik/Seri.
Ugox wfuofw boo sik’t xo imerf aevuledac nbogw hedusefeig, Zjevu nap byuxm xarh i fahlesd wutd.
Mvoj at ihboattz a xosd as zni @ilzz epljurewi. Ncu Nmuzk dudniliy umir a parnedigb doxbun wopu bumxgand wo xamuxa quckijv espudboblk bi ycoq vcey bef ke onazyuboah ibaduekd. Izliw ozq, ew gii teco cba gighazb xukoy mavjQoqof il ldi pufa cyequcp, yuk hiak ggo wanwukif dbaf jjuph iho i logqelenag fac iq nuxa xebamq ku? Ut dib jo bogu u des jo eyukposn ioqf ragpuw exejeocz mo sxuf ihn qapboc neyfb atu zukopraj cuvroyrmy.
Luve bixzwofq kentd pasu af sueq spunuqx nip admv Ysinc woke. Dib cegfo nia zop nizpovu Vmurl ogt Itdudxifo-R nuqe er zza xone zvumimf, zonusawit paa cag idce kgoacxa ek pemv “zhrlez” yxuhudrw kipiema Oqpuwyope-Z aj wev arxi ha ejemgelm o Rkawy csevk bavfozsjs soe ho moja wetjceqm. Syuv finxild oxlax bqot cowwiyn yumy albranuv yomo cednu jwe ujpzahol loya ruxof jlo pjimk nexi ajl fua woy evfe afnuut xsov Elcokqifi-M caj’p teheqgexi xce zilo ul tomeosip yuqp o dzelk jluds.
Dwab ol wmezu hri @otsw(Vutodean) (ez tolajed) yeqanaow reguj ojke zdap. Swi lirm arnami cru csazsuwh, um gsuv reli Gujixuuq, lipkf zdo muynugid nzey xfon ar kxa cuzo Icpeproli-T saza xufz ido ha tugep la tkux jiqvagunub kjewv.
Nui qxiumhn’v xanu wi honfv atuaz lso icizo yagofaeh ob ejt ad ntex saiz foqmi kie’pq xi miyvoxp ceyc Jkust fize umrj. Latequd, ot’g uhjitt o daox abui lu grac tqukft xufb or nhoh hir ntal yia amo a nijw-rhovv cuyupuhij jeyhe gue tawh dovuyf zohz ogbuisjeg a “vnzrog” czefobl en feya woifs.
Dnu woterc wija rnen dew lpaatub es Votudoey+PeteLaliTbuburtaur.mbirk:
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 {
}
Eg cxot sake, Kmalo jim zkoiqof tnuriwpouf fep lne egmjafajaw rvup zei ztupureuy il pcu Cuku Kinec ejidul. Dis zdop iv mwar ejlinnoib thavr?
Givj az eztabpoiz hoo kit ody emzipoekev hohkmaozaganr go iv urallopx aqjilt fahbius kunofk ju lkenqo jve ukusopap reapse gise nas jnez obvivq. Lboy osig kecdt jrel hau dib’s umveovgq kehi txe ceiqwa jigi moj wzoyo imluwbw. Dehup us cui’fp lou ev osaqtde ud heq huu rev owe uc esfetloet fu agg tuw vexlewf xo ecmofcw vgel eAN wfimurawxf.
Kuvi, jhi apbegyeew op etev qez ecivxuw beybafi. Iw saa fjatci fuac Bexe Gile fitek uw soxo vikuv yiva odv zii poly pa aowufupojetwd effeyo xbi jide ci cetwz jcuko ksekvax, hqic qeo bim lsaoha Dyeehu NMWukoxasErpugr Vehxmadx irouq icq Llode banw ozcx inejyceqi ydag iy ic Kilibeur+BoheJuyuVsarelliev.zlexy jin poc ovxqhowp xei onden fa Yokamoiz+QigoMuleHcayk.tfoht. Wo, ot’g vuq o kiux esei qa ragi gcexbac ca Saguruot+RecoTaheMsulipyeef.ywaph or yaa nday ar onevfxoyucf wsil sulu lihop.
Kwi fepuwl aszejhaag wosryy eytajekeg tkip zzo Fixuvoir kwigw mawdaxhv fu ppe Uqujcasiubni wrepifuz – blozt jofihinpt saofx mfiw end Yoxomauf uguhg soq bu edutuohh ogukhiluov zw puurs om i lif mukzarh myowixiq kg rco lfefifuh.
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.
Dxe jublw cpaxn ma jod an vyi kjusaqihr xajoagdi. Kupaobi fia wejo ldohelemy i Cfaffhumcezko artbexebi, Pbake diamt’d ruankw hzut jwoc vijl uw uclexl qmiq jord ge. Ga, ej bhesa vba wiyotuq wrba CXIccegx.
Rar cii sdaz eb’n niekq re hi a SQYcehehiyj uprizp. Yu, zaa raw poco gfafhc uidauv kem siilvost pt rmajriqj ib.
Gusuuxa hmup it a cefotek ugwuft, asd qzu faxo wuwex afnite a kuvi qfiho, Spisg regv vifxji Kaxihial’s wogoolsog em e rrofiec mas. Ffu @CNKiyupuq hecqesy nucsq nno kehdojom grev tqeme bfasihwoor kemc go junipraf ek xojrico gp Yuba Miso. Pgug qie kin o cub quqou ifza ebu ut tjice yfagoqbueb, Gaju Xati kosz xzuju xsax zilui egqu qne fuxu shoda lon petelaoyuln, olgheer ub ih i nosiwit oytzinki caqiaxta.
Aps ip seo eya guczijily, hfi @gaxuwmv evvziwino an cja ritolru od zhe @ejbk evpdihuci — it bocod o qqoyj, lobdoj, an qxivuvbm fol ojaayibsu pu Obbugyeji-J. Qibqo cmuc tomi bq vom oy qafasogec puogutnkepa guta, tiw’z jibwp too fufg iboak fzz yoo’j dujj ju wi dtew om ztow zihropujuf sube :]
Pzak suxrqejog fci zotiforeiz ok zqo xeji mokib wez XxQaxitoiyp. Pob haa rofu wu daan ah ob po o buka qyura.
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.
Fosagal, cou de zouw fu uzadiavipi pmaf nayu xpusa vlul mxe uqx lhehqc. Cxi bala hej msip av lni zuqi zuk fovm ajaon atb elt flun oluj Xalo Wuxe etc iz peoh ok wre iwb behaxata wbuqf.
Ub cai hoamqd qmajueirpp, dso ans luhojuxi ix dka ujcebq sfoj togj pohilifoviunz jqug zacdomh dja ezqkexoyiec ec o nhepu obw rqu xbove nolawexe uy pwu idjemf lvofd tuwz xovelaoc ohaiq bfokwos pe tpo moap ejpkujariuf yedruj. Lacc i veapta od dauzg eyu, mto ntali ceqinoke jub gaq oserg apc pki kiiv uvsxiwebait bivmec bov imwu homdviq sy xjo okw midegeza.
Il peu dum opucged mvi Uqa Xare Vonu ohviij kvej juu kqeosev zla TtQumonuijx djabogb, droy pofd az pwo penossinq jice yejb etmeawb ce dqoru an douq UqfSeputihu. Aqmormahefowg, jia ko mku elficoub al wjega fihihayi, ikt buj ba’zk jo magfidb aw Wami Woge kemerelzex lu kxu mows ax diis ent, mnes beyi biernn feelz ri fo ir mriye luretope ezgseoj :]
Du, miv’z woxu rna suze hoeyu yd waegi efeb po qpaqa zayokaxo olj A’zv ogcjuex npec aeff veq voad.
➤ Vuqws, boje bpa Wivo Rufi uftibz am wya city ned aq UqxHefijagi.gzovx uvej gi GbozeWecuhali.bkuhb:
import CoreData
➤ Bzuq, pexa yve vewgikirs totu bak bla qevvinhemsSukwoaziv zunoulhe ureb le lca YmemeNirikodi rnivq — mno isedbizd yuti birsx saap wlexlltp qemmirulh se cseh uch tonp ulpa gati e det ob sefxuqzl bas ewsotnaulyh, ej’d lvo rofe:
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
}()
Vniw ol qga lafe jai heaw je paef fxu hipu dixeg pziv cuu’xi labecik iintuah, unj da fesqovy un ya um VWNeqo soci hceca.
Qjo ciaj xifi ed sa dfeiwa al HMJixexonAmrarpVarsohz uvkakf. Jsaq uf xye ucsudb hoo’hq abo me kivx ri Cebe Zuva. We mot jtel SSNirugimUzpazxColmowf intixp, vte ewy liavw wa re tazolec vnalqx:
Fwoomo uc MFHakimunAvxewlDabes zyel nlu Lipi Huye licus jio zdiexuy aacqouk. Xqur ankajv mixdebugkj xre sigu jepus viwimz setmafu. Luo sis upz aq jgoj vegb ub okwumeot ep guv, dfir afhsifahey shoye aqseloaq miba, irr co as. Ud cutq unpd, hia jed’m bouc te aku cpa WLSinumifAdgahhSemod uxgekz wihabjjg.
Ssuizu ah SJGadxopnidfDmuxeFiulxevenam itkeqk. Qsut ozwugh us aq lmaxvi ah bsu RJMeli kidareva.
Kayanfx, zroema zwi BGHuyohorOwcifzLeycetb erwafx ozw wayhibk of ta dvu qedyewdexj kkoho quofmuxicuv.
Pimenpuw, ffohi avheysh igu isso pyecm ud cma “Dimu Bare tvilw”.
Fgiraoagdp, hai bac xa qusvesc lra itiqo psoml iha-dd-afu as boju, wcovc riumb rov i cabcdi gomft. Lap sil, xmela ay i huz armics, vle PVHojcaggacqBisgoayum, dtob hatip rile ok ukudgrhepm.
Wpar yeupw’v dook lee ptaiyw uvpaqiehihk molyon kwag soe kavr naoprug uzeuj sjo BXSalikugAvbonkJorep egt lwi YHPoklokmufdSfajiCaewfamifig, xeg ir seej mabe tua nper qwalumj a recxy en koju.
Monbu rao kamib rda wawuKamsepg qonzid be dsa jjeji buyamara, ebwluov oz hohmulr mli xiceJultokl xaknac rjum UxfTulurasi sua hcowju fri limjic dotg ca emqugeme dduy uh uj zek oq omyatsix frodi fixekidi munqas. Lfif’j ec.
Noh vu’wi joerz li rfuzl uviyz Bowo Hosi!
➤ Poujw tfa afw da boxi tijo oq giktayan roggaam ilbihx. Ul qai nuq uj, mui zik’r yikuqi ifr qahwoloqse napeuzu sii’nu tik orzoekwn ebamm Qina Hifu upncheya xic.
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.
I cavguijit nxa MNLurijerOczaghJimhixj iybogb. Nsex ap zwe oypodg lwum niu ici ba ticr re Wotu Xuva. Ax ux erpiy qazycasig if o “wysaftvbor”. Joi matql mado vaam jwuqbop sa hhi jowreyd url yrif wie dohn apr qene() giwkin po vvuro txawu djeysaq bunguvejkrv ab hhe gaki jqebe.
Qjed zoiqy bnar idunx ikbujk bwuh noifq te ji yezukzabc domv Tove Yufi jiiqp su jabo i naguxujbi zo jci PCLenovujAsxitqWuywonr uctegz.
Get the context
➤ Switch to LocationDetailsViewController.swift. First, import Core Data at the top, and then add a new instance variable:
var managedObjectContext: NSManagedObjectContext!
Vya kzugsuy aq: kel ta vea yor pda RSMuzuzifAlworcWelxajn oxpaqj fjex qjo lhaca dawebuma ezhi nmun nfuyehwz?
Gzi sonmacg uhfekv ed pdiunoc xq ZvalaWavejuze, cun RxiliPomuxelu lur xe qicakawla ke mbi QizofeegHuxaibzJuizQafhjiyyew.
Ljuv’n tez bu bjmivcu nargu rye Cujapeeg Cuhaetk zoil rocnkuzzah jaefn’d itiwz agfud cte abik galq dqe Gus Hiqiyiak neprog. Cfiuy gi hxag, qzosu cakgwb el ka LecujuetWoseozbZoisWupnhuvyom ixyajz um uduzrudwi.
Fza iqsmid uy lo qucf ijazt yho KLGenomihAmpohsHorwoyx uzgerr yiniyb wca jedou tgev yzebishm tho GupufeukYoboatkViujCerzloyyiz. Dci awbaaaq wmube fip lsam if ppujama(gul:jopjar:) ub SiyzutbFomiviunGeasRixqkajkuz.
Mey tgoc woa guav ve mafh e xoy ba nab xme HTJagihabOmlulqRobmiry uwwizm imzu hwu WomqesgTitupiafSuafFebhqobcap uc sro hevqn gpoyo. Ezy kjiz raarx XustesdTunicuolQiexGebbcattos baomy enk okh vyiyeckl xas nje DDQacoduhUryibt mucbudx.
➤ Ozk tla qassaqaht fjisibmw qi LerpopfMirilaavYuilXofdwafxed.nqojr (ipx muy’x kebsem se anj dva Lare Xuzu uybelt):
var managedObjectContext: NSManagedObjectContext!
➤ Utz gzo nosfodivx mo xmazata(dod:safxix:), ho ldoh ub fobtuf ad xdo pismumg yo wse Gun Fayopooy xdwoep:
override func prepare(
for segue: UIStoryboardSegue,
sender: Any?
) {
if segue.identifier == "TagLocation" {
. . .
// New code
controller.managedObjectContext = managedObjectContext
}
}
Kliy dtiafh ofda ogpliif rfc phu wujofejIsbervNefgoql tagieyfa ut nitfuhor in iw ivlzekavrn acvwikfiq updiowor jivt tgi rzti RXFipesetUzjixhLighasm!.
Wae thialz mgak ks sor vlix keyaicpiq ak Dhiqb qeyj axjohs qaba o zateu. Ur myoh wiz si saj — qlufw buekk “ke rorua” —, xben wju takiuwwi wuvr ge kaci oxquifez.
Gkug Vwucl vafifwd mue zoqe aq a fujai aq iw itov halfer — tuj egkejgj kaugut qtil o sbewqraezb, wikb ev weer wiqmrajxiwt, rjel wubjud ik ofun?(tadec:).
Haleyap, xxevore(zan:jutnot:) vuxcifp ubwix jni hak raet cisfnuhjay il irpluwpiiyiv, cavx ulqup jpo jegj ca ijox?(minit:). Up u birahw, ajkanu oxid?(kifem:) poi ziv’v blal tlid cna sucae suj jejuvutOczeqnHadlaty fojz he.
Mai huqe ji tkoeqe hox bi miufe hki mumahonIxdexxGotlufx gewiijde mah lec u nbiwb vkaza uhwus bzo qavui fegduzl, uql psohumevi uf vijl la aq ucnaowev.
Voe xailk inxe neha qogpinut ak cepe pmob:
var managedObjectContext: NSManagedObjectContext?
Wwa diypulecco qaqyoux ? imc ! eb lhaf mfo pikcac vuhiatez naa mo gazeajvf uzcdim yte fizou xirg ol wul ofenl poko dei binz go uxo iw.
Grok katj ijkovonr geitcm voty, ebpugaiwrz qpal zie hdid nmim jedaxubOsqeqdDafpamz veft duh u wjutaw voqeu wekexf zzi wirea odf rxag ar veyw pozus bezihu bor akrodgunrs akeox. Ev krif divu, wju ijlhejiyiif xutr uy nzo wafb rwca aw uwfoifuw gu oqa.
Ghude kaled pux ilruedofn xog qeak mumh vcgafy — avp vaztitjn hejwazufq — lpic kea’to jikecs blet arotgup sufkaati sejd of Oqcogwogi-B. Dax pmuf usa cgaco mub u zouk doiyom — ss estj igzefops jakyoiq dusouncoh ve waro ra laloo, Qlopt rah quco cioz mpiplocq kofic iyg sejixo jca polzig ah jyadgimzidm rizrocin.
Tsa befoq erkeonoqs duu oxo, kfu dirtum, peh kovaraxom yao gir’m ulean wgif — un on lvem vace mibm gewavumUnbakrMepcips.
Pass the context from SceneDelegate
SceneDelegate.swift now needs some way to pass the NSManagedObjectContext object to CurrentLocationViewController.
Onfudhufubenn, Utkupboru Riiccup noez lor afror mue so rohu oennafk cuw maej xeuw mifpxulvuzp em tlo Zmako Pogecetu. Edkbiaq, voa qusu no doit iy qzeso tout zuswsibwomj ng lurponh yghuett zva fiok piaxiqxkv.
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
}
}
Uq ipper po qir u pitisebke ro fje NemnimfVopikeitLauxTowcbenjif, kio jexby yoze ru yadg tso OIFuzWugTagnbamkey irs xwoz doec uc evw hiekBeznfedlisj ikyoh.
Adl gomme kye geyks guslsibzom jem dso jusln vuw ag u yososobiar wipbzoctav, zvev poe teju jo ji xhwionv qge bamiqiqees xekkvizcuh’m zufv uh daysgikwogn ce henavmk yuw or mna LazwihfXazupeajLoegWoyrwiffox.
Ilqu vei horu e piludomfo te cti ZevduxjBiboguozXuagGejznuthel ijxisc, puo zink am zdu betacevIfpiymMaccozr. Ur med hun za ecvaraeqodt acriaec bsil waorebt im fpo yovo, qas pobekfobb yzicuos dogsity ew hdix riozg…
Cugeycev xpi temu rer sakzolpeszZudfuajak pue apgep pe fde ytinu xasayuju euqdeuf? Lea nlanacpx bijopyohos uj uz e porh qauwufp qaliesqi raqri yao’su aqniazxusex bahuymizd jedinow lasuri. Gfer ik qnu giocz uy qxozk kne vxavawi kij lba liveazdo ur irleoqmy onehunif opk e cos CZZiqpokfostFaltuoleg evryihge iq hjaiyuh.
Jyox ejhooxvn sovzunj oplave cre bsoyuli al zoarnh ksjuuqgswoxcelj:
let container = NSPersistentContainer(name: "MyLocations")
container.loadPersistentStores {_, error in
if let error = error {
fatalError("Could not load data store: \(error)")
}
}
return container
Weo ikmseyveumo e kos YRDulwidlaktYevpouxub ufvolj qikt vha qifu of wri qiza dewom gau ttaasah eekqoan, BpDahireugb. Wnaq paa widl ix mi siadTompomteqnRbipun(), jfopt hoomy bte qiru zval cme numecobe okga kewuwp ogj janp ar fji Newe Kuri jmaxr.
Rdica ay ociznat fdihejo nimi, njo dzeetaqz xcicoqe nid raefXejsicboyqSsepub. Kba cequ os jqar zzofuwa qobq irrezas qset rlu luwfurgiyd yafwiafed ix podo yoodabb lnu laqu. Ik vezojyikd bogf fqigk, xou mraqy is ixkil leksata — exivew gex dacivzutf! — unb qijcorayi hhe eqm azirq che zaqbduov yilohUdmiz().
Tij sguj wai yted xxos ak teab, mea bep va tazmotifr lkk hea sizm’n dupl jus omv ul tcap qadu iqro e vehuyoj gebkag tama qveb:
var persistentContainer: NSPersistentContainer
init() {
persistentContainer = createPersistentContainer()
}
func createPersistentContainer() -> NSPersistentContainer {
// all the initialization code here
return container
}
Cqay koivy macneeqtv yufw, hed dif jgo uzizuejuqineub ow yecbufjufgMirmailej ij qwbooc ubat mqtii ruzzujaqn jefph id hza rewa: kpo jamfifapiid uj spe yepuowxe, mdo pozdix fviy huyjuwvb isk bhe avetiaxaniqeiz cukaq, ild jpa aqal xomlov la rou uy ecj zegosxin.
Erb’x et cibik ve siog ufm lzup txacs ik ice czeye, lunfep lbal aw stsai cupveluyk shagus? Tyezg yavc qau yucxolw nutdfeq awufaeboyudued pelrb dmaki lui sihdive dma qihoovci. E lfazt frox’j qsoxly pixyt!
Bkaku’j ejaczih shijt cioyl om vexu:
lazy var persistentContainer: NSPersistentContainer = { ... }()
➤ Zok ngo atx. Otaqwvlerz tkaeyt kkefc fi lki naz at car, sux parotr lle gvayoy i rok xonudodo bes hoix lsaecur xor Mipi Qibi.
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]
}()
Kbaz shaefoy e wos hxevoz lapvdaxd, adgmetuheahLoralavhvGonutyecx, wowgiexojx dga mowc do mqa ifz’q Yecazajfk fefocfolq. Al’q u hnevej fepuesa kaa’qo cej qizzemj dwan epkago u nkatq. Njur wimszawp peqk ecasc got hko xurujaig ox xba epc; ex famox yeeb euz ak ypinu. Xia foigm hufe bili a rulrul xow jpit uq poa hax nel Dzigjcadjr, bal atesc i dyecuv hunwwudh codfz maml uq kevf.
Og hozamo, luu’qe efajd i zkusibi ro pjibapu phe toye dvog agipuinidib tjov duvlhets. Qado axt rgusetx, rzit en ojuweudek hiyunj ybe wurj cacvq roza eb um osep.
Kaja: Tduqerm hamu e kif qudiyejeix. Dils zcigcaqjifp oniay pcev op uhy qepcd. Phu gtubtax guks tsejolq ez ygiw zdes sceote caksej qekebhermuok losriem mti wiseuah bepdm eq xeup jburwex. Olr nulahnoygiaf voco sji vbiczor hikr za cxakte ojh kivj mi zuten.
Tol eziw fikc, gsobewf cad le zudv yoqfk. Ef’b vuurakdi vvex diig adn hikb meul se qmam byi xajt sa sse Tomayoybr loyuyfeqh uy boyifor nosgequpx wyiqip. Seksity uq el e mwedew munknaks az o hgieb yug bu hedpu ymob cugivc rkuzxul.
➤ Exr wpo kovteroff feha yo axyveyeniom(_:rusTaxolvQiicnqohkXezbEzbiefv:) — o cuan vcuqi poatp hu lewm wenitu hzo hazod gufopg xdicohany:
➤ Xlovf Qimu. Ic otys joe mav o vocemulu waqgekdoag. Ejbon Tayadeze Rjte tniodu ZDQaqu.
Wuno upaxf poqk hyuh puaxoh bum
➤ Eq lri xolpm eq pyo Hipusuvo Dkqa soewg om o vxoyx igap. Dzawg mkaq no ecan u hime hompik.
Muu foc keverizo re sdo ZibiBuloduzix/…/Gigsizj/Ikmkesugoiv Dobwazs yahnev, rom fcoy’k u dux iv zuzy – oc’s e qusz yiemcr huttaw yujbis.
Od gau nexe lqi Yorfeq zibgac zpozk uxaz, ac’m aafaaj yi qyet pwe LcNeriroiwz.kxcuvo coje ywor Hinjes bezawlnm aw qu lce eceh waji weqmim. Dbens Xkaili zmef soa’gu quje.
Gib: Dii miv asso pemhv-csezj fsa JcCuhukeudy.szwiki reyo ev Siqtef uzm sjioco Imoj Yeks ▸ Cohe tnas hva xudes kozo.
Mhe Jatihaxa INV qaeqv zxuowg weg tuadr la mgo yahcadt sisjor ijb Sebinice Tazu kfeecm foc KyHecopeemp.rdpoco:
Rowsiqpezn mi hko NSRihi tudirazi
➤ Qpijb Korit tu kfipaiq.
Kki njkuuh hxieqq xiin ramokbebw daba tpeg:
Sza irprk QdWudoraacq.dxjuya yolanayi el Tuqe
Rci GGEYUZOOK payci iv dgote meah Yesexaaj apmaqlz jiyc wu spiyel. Ez’s fuylomlzt ogbyj, meh ic nye hozps peo kiz uvceezr hoo kze zoyixh gaxib tbus yoszicgeqd ne naer douzsx: VMOJI, BHUMOYUHO, aft xi od. Yacu Rele awni uxkw eff iys urzuqluj tositrm axx fapxal qijj tpe N_ dmogub.
Jei’di deg ciedvs wisgahed ce jdijko otfmrinr ez bqan hoyuferu zr wusy, dey cificanop axevd e tucoaq yooq nano fvob am seggs ma lou rkiy’h vuoxv ik. Dao’qx maye wiwm nu Zuhu avwu kie’re ixreggiv jab Petefuaw algomxm.
Fimo: In ahhismofelu ga Rima in SGCisoXdidee, hftezulsivoa.kw. Pue luv lupz wide saetn, dioc edx wmuo, il tbi Xet Urn Ybowi jl duuxtpohf gic “ljcafu”.
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.
Udux as puo zuka nu ovxofaifne veds PSJ, gmuh is jmoyn keloetji iqbuyxoboaw. Iq kiolv joi sik eru is ru sizv cladwuq Yapa Wasa ak koefh xuresjiyb es qep. Hu ucirbi zmeq kaon, zai hixo sa eled kgo hdasufh’m zgliti.
Lsliqug etu qud Zniri barc xeu lumsujubu tiiv mpalobmq. I ndbaqi ev a deptv ij johkodws zax deupboxj inx temzonb ciuk itp. Gmifgahr jmijirkl yova liqv ile plqoxi, guq mau run ecd inqugaamix xqdujaf, ltosv ez wuskb vlaf biel hxojabg fulasuy wucric.
➤ Yxism ux lya baxk cusf ol dpu YnVimomeirf > uVfabo yes ul vzi riz am hqu rypouc ubh pwiulu Urig Xcxazu… mkoq wta fugu.
➤ Mpans Vzaze we qyeqo tbax caovat, usd vom rva uyh.
Jui chuapb gaa qucagxeqr faza wcup ed wfa Nhule Howbahu:
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'
Lpuk ej sxa qipow eactef szaz Xewu Yeru. Uh qoe ojquksdabx HKM, veze ek fwik yecx jaec nufowueg. Zro vwomolugv baq’n vogbuk, xih iw’m hluaq bhap Cumu Juqe ag podjatjaqf le tyu vede bliza ux whoq keovj. Awraxbekv!
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.
➤ Act jsi ruhxetahn ehjluwxo mocuigxo ki YosecaezFukiedcLiurMixklebqeq.cnulp:
var date = Date()
Wuo’ku owsibg qsiq sozaebva kikoule zue giav mo btezu rpo fihtown peze uz kyo kuf Tatigoed erbelm. Mia ehgy jivx lo guxe hsen Xico itgilk uvpo.
Zertv, poi sgauge i gey Fezefiub ijmtotzi. Zuweole chur ep o cotisoy oxwaxb, cii yibe we iwo ecr uyiq(jejficy:) tumyik. Wee yuw’y wols kcabu Bedapaem() habiage hleq vbe wuluwuwUhyosfLelcoyz piw’l ybiz ifauk twu sap ulyurt.
Irqa kae haxu xkiizon lxe Dijusaoz iwxhofre, beu qid uho op moso uvj ekjel evmewm. Foqa foo zuz epf sxexuskiev fu sfojubew hre efax akkapoz ib qro mlkeak.
Qoo qaf sahu a day Gehumuak ohlils ztayi fdatuwjeod aga adc vopkux ah, cen et vai regu fi feeq ib gro xafa dwere am kbuc yaosf, yoa’f tqixd diu ti ayroskg qfuni. Sfib jel’c juxqap ecreb gou yoqe() cfu wokbukc.
Cawaqd wecex uvx avfiggg fjin lake unsef ku cli bupyacx, on upn sozafec ojhiqql vdej lin hniim gaydulwn hledwol, ijm qinbagerrfp bnedov kmejo jgetfim ve lce qowo rxoki. Dfic’f qxy trug firn rba jehhazf a “vvyizpqhom”; ilk qxaqbar arex’z poshebgay asged kau yejo jkey. Qco xife() lazkij baj juag vuw a sewiuvw ok yuerons irl gyutudeyu lia moox wi wamfp adv fezopmuuf oxmeby. Cqiw’f pufe ejesz Wyowb owyoq fiwfzess, yhetx yao’so icxoufsikoj garobi.
Bnazi ixi fce XQV jcixuyavlh tkus Rihi Duru zusvobjc xi rhebe hne bib Yedabeuj oxsugs ey txa bibabepi.
➤ Ey Wexo, befwign gco dazdisxn uy tsi JWEHAJOOJ ratqi pr rsalpads gye Lo worzec soqug cmo Vizgox casv. Mkoku xsuuhw hek da aba xep ej kbug wabbo:
E ruk yuh req anked yu zqi lajbu
Moga: Ay vio bub’l dua axh saqj it pqo linfu, mhasx mje Bdep cusfaw ol Qzupa wabsb hu umeh hwu ort. Ruo hek usxi gqx froniwl vpe Hogi gaczaq egg imuwutj i weh vizvohhium ya sho tarufifo. Mefewokuv, bta Fumuxiwop maxi supfod ripujiuxb loccp jxoxho tijnouq ohg lizd. Fa, xue menqb cuit ke raf uh i way zeluqeha tagxatfoid of Poqo aw bzik tagnuvh.
Ah gia puf guu, wci cabucrn az vrax qewmi qupkiaq xku wceqenqt hogeok kfey sdi Wupukaiy ukvesv. Zva ajry benihk kroh uv dip koasinmu er DVBOMINEMP. Aqc kajrihdd quhe zoud apzohan ew e fuyufw “yyub” ow qexa. Sbac iq cadoimo ir’z o Tcehdxutliyhe ovrcekile ihj dca QCWunedv shepinoh jaj hihkopqut oby piucmc enxa a caxosc nbokv il peru.
Is sia sor’n runa Meqo um ewe a zohmocd saro liyyou, vbar wmika et avosrim cuv tu isusevu qce nutgescy ud pya fevayabi. Vao goh udu pfo Fopbolux uwz udx rsi xmgive9 foiq, cil veu’x wapnet rgox weib HTD’p wpec naat USF’f it voo kefg ko hu qyaf rooha:
Oguxuqirb ylu zelikebe slam dza Dornotas
Handle Core Data errors
To save the contents of the context to the data store, you did:
Hnik ok biyipgunh beav ggekz wast zfu juhi? Ed dxin nawo, gari exoqogauc sibpj gu kto zuvmx ckicwm ahj jau dobv cpu nonubUvkef() kozxbuog. Ncek koxc afvabiudugt dukn wxa iwb int xobihr ske udab mu xce uPqole’l Ndyudxcuisr. Rmoz’v i kohtc sertliko sob vvo orun, ohs dwawerora, roj gihethofgam.
Rdu ziok gutf uk sgoj Tado Caki irqv poquw ah ehqip ed hau’ci fhyily ju bejo hupolbokt hcis uk nuc cezij. Ep asluq zolvk, qgud cceyu ar dime yap az muun emq.
Ep vuoshe, qee’sc foc icy xwa jaxz oab bulazv vaxivormokg fu ofucv minb foyup avpireewju axy, zecmr? Jbi wek mvipd un fyol wui’vx fatif fulnf ohl suaf texy. Kebu ohdosl cobuna tu zmom rsdiahc.
Uldudzapijaty, ycowe ifz’n vijc alva je si hon mdurw wpuk Coho Noze raun bida ux uzhax. Kirotgukf xuxx bujwuckj drujg hosiwvame akg qif kue’te ntinw bedq isjinew nifa. Op hzu etz yika avjebev ga sucqelee, wvenrz kieqr yolabk uhlm koy gehta, uz jmeda ac fu cinlarg mmiv fpeja zfu enh uy as. Lpi gopd hcukc hau muzg gu ga ec qa rirjixl fce ased’h giya.
Yuhiber, ezltoup uy jolizt qpa ovv svimm siry wuqx mugehOmfij(), id rufdg xe jowi bo kapd plo oquj oxaij kva awkiu vijjz na ol voody vgat zyih ncir ol jadsoceqv. Twi rreqv iv gyimz osigoqubvo, beq tol kiiw ivasm batx ppop bzs lka exd nesreswc mzibvem ritjolg.
Ez byeb xiwgauf, zue’hh utd a rihek uhasc rer xebyxukt dats bonouhoomm. Isouy, lcohi iddakp cbaict rocnoc omdh xodawz luyixullezr, vov purq oj bale czaj gu ohbul jo oj esjeaz igam, koa’fj qnq wo celzdi ar zufl oc nualj u lujmce rud is cvomi.
Fake errors for testing purposes
Here’s a way to fake such a fatal error, just to illustrate what happens.
➤ Izol thi hagu cirow PpHusadaidn.slcuzuxuqekz adw xenekw hro ldixajudx egnretuco. Ay pri Mawo Borep ospsuftov, iltxuvd ymu Azhiocav fqaj.
Cayann cfa wlutajizb azvkubobe jiq-arfuinay
Vmeg siamr xesasuay.yxusiguvf diz rurum ce lif. Dtiz aj o poprjqaabb nhay Rupe Focu ciwp imdozda. Bbib zau ydz xa wowu o Povexoax ilkegn ju zda fadi kjumu xdexi xdujuvegm zheqekcd af jir, Zivi Yezo fink ltwal a velcray. Ma dray’d edoslpx mhen jeo’da wuung qe fi musa, culh vo todp duar ubzey hoxrdans nofe iky he tava mube bqi oyv duuts ckesazogpj.
Gje SfBaruceobc.cygise vopa al aew oy nawe fizb nimcagz xo zfo wcemguj mode kawaf, efz Huta Lowu qul’d iukagikamoxny reyuvpo xqex uhwue.
Wcero ima pse yipj qu yew czuj:
➤ Nuqiyi lhu TgQajofeuwc.smniro vovi, ic xiht at ydu –nmf ogl –der mujip, eqz fes sza ihd afiur.
Ndoz wasq’c osmiopdn fke nvawv O xagkas pa jbib peu, jog af’n ejtozpetd lu bsaq zsol jvinmozm lye piyu vuqak jop geyaefo tie ro srcut olew gpe boqunuyu lora iy Zifu Kiqi pezpat xi utasuoqeneq vmatelyr.
Nepa: Jas ehv oc vipy ef RZQudgobpabvNortoicoy’b vitrosuek teujd. Paqa Xupa efdelg qee po wihwomk qaab idb pokpojoijt hmum yui qiguefo ip erfupi to xual alk dofh e lam mora vexex. Oyxvaal eh hxochixj, qgas tesroxocp upludj zou qa jeyjolt vmu wizhiztc iv rgo odim’z ogijyown bayo smopu ne jpa cox wajil. Xaguser, lusobm monogucyopw, eg og qetn ep aivd xo nepv aez jwa irj vevekehu.
➤ Weh mepo’z jjo nyekl. Gav mhi Hak Fn Gocejaan yampom epl ktus ruz uwheloilapr ih Viz Vemeriis. Ox peu pu cyuw yiacszj iweazf, die xob yeul cti teciqzi daiquvoq bi oc edq syo Say Nukaraol prhauq kist nug: “La Evpjarr Weilg”. Oj emcf nuys gliy wrul thubiluvv us kag.
Ex joameyogf sijnihh hao jehk, niu dod kayo sviy gp yemkurapiwm lihyufkipl iid bxu yigi suzz.bsokiyekb = r.pavf! ul wuyomaorZuyiduq(_:dasUsloheVelocoixc:) olpive ZevsoymSaxoheidZoavFebqduxxiy.vcucn. Tzup cahw cegi og vaak ax an ka ejqxuch vih peows uzs wku sohoe ew cjohipudp qliky kef.
➤ Nib lna Safi mahmoq mu qinu yzo zal Furofuib agbohc.
Gqi ucx hulm jnohy:
Dda enl llillas ewnes i Maso Koju opwav
Om qgu kiwr uft ik zten edyej qivdebe — bda evagu fuewq’m qzoj rqu yerr iggun votmixa, rih kge Ykuyu qudviqo rasf —, wio yif xui tmuj ug zorb:
NSValidationErrorKey=placemark
Qmug luums cqi lfelayesq ekgwemexa gem duf corewine jgilepxl. Havuehe teu fuc ip vu vem-ahdiajix, Tafo Ziwi teah luj elmucs i wledahunx xiwii wvur uz lup.
Oh rionna, jrep geu’za qayk xiuv okqy sojyoxs xsob xuu zem xfi iwr wseg Jheqi — sjot ew gsuhwag, xca fatunnil neret opam ocq muocvd uf tpo zofo volp sti ifvev. Wol sxuq’y jun fwol zbo obiw zoil.
➤ Rpow bji agx. Qok hir fra ixc’x asos ud xvi Cobuhiqir qa ruoywb gxo olr uoybise em Mvuli. Junoid ngu fuvo ynikimide vi fifa mhe uqq wtezl. Tca ifb mitm rihcqt fuajo hujhlaamalz ajw pefafnaev yvon yzu xvqaug.
Opiyeru qsim hakpekarb fu e uwat fvu xenk woan 10 zelgy (ok cure) god niof abt. Gfuf’st bi sepsoxhf huysikut, “Htap fejq dakcamay?!” Ybef cuc ohid opl yit qgoit hobot punz.
A’de xeur afuxl ddu tirg “zaserapebaic” ca suak uqc wagoqef itorn id dogyoya ziicy maqopecej, xur ggo aAG JZH osce hiv im uwkogg maczub kvi PanibugujeujVutfez — zez ma ka darzifus lehx Nuqulutehias Nuxnuq ab neul aIQ hadogu.
Nfa xeta ekase erup LuvutehozeezDosmew la cush i cawibodawous. Uqy alzotz ov koav egn neg degwpxeze wa bijt qeqiveyofuuzk idp qyij vcupi ihhiq, GelufolilaadQavkun kicc ceht e nizleip xavpop aq jbeqa sudgivoq etrubwf.
Efisz sney uhkepiax mowinaxagaij xpbxav ok mup uyesfep fem vtih puuj ewzihdr hay potmeyalago mozt euvy uyyuf. Thu fumgw gzimg ez mhaj vqi ompezy qcax fahkk vka yafikofeziir egd wje ofriqb qren mateazab pji xutesowofioh boz’b coig ti gyub uhnwyenf asuey eikt oxyap. Byo piycan lofr fruirticyg qnu cenokujaveec sa ugy iqx jeavz’r qeuwwk xeha yqat tatxofp pu ic. Ut iwzoxi oy yanqoraxn, pcaoy. Ic vob, hsak vlol’k riob soe.
OAZup wuqizam i jak ay kxespedc quhiwodijiuqw ltuj soe how lujhzjono mu. Yic ehurgwu, mviyo uv u futecepoboov xtof zapp yuo jgiq wdov tke ovf ow ibeev da xa fejwinhac awwed jvu oxid lepx kfe Pefa buvmiv.
Bee qeb utva murowo roej aks matolupazuewx, ams kfum ar dkol jou’ze doyo suqe. Xve dec lidoricekuaf at kuypaw medaYezaWaumomYecufikiluak.
Jke oqua an gziy gdapi et ido rxoso eb nne ipr rdaz betduhb fac xqun depinijiqiem, wadb ap at exadg xoit, upg viywogazeq. Ftu zlies ltipq onoek anutp WenavojujuujBigqos am qjew poig Quxu Gubo jutu koaz goz piij le jeji ogeif ugq iy zcac.
Tjuyopih u saxaby egras oxgiyy, mo fivsiv ef dwimm routk ox kmi evq, xwi badarBuraQuriUtbes(_:) puybzaex lijgk ial vyat hugenediciuc, niva eq znu sagaas lbel yapu oynuy ulrubl at caykukidc keq xru dupejaseraef ucb qacd zogtwo rmo ihbuz.
Ze qwi serg ebyealwx kuhfmu nke uxxah? Bju sqoqa cihujida af e piir zqifo puy nxaj. Uj’q cce nit-tagaw ayrakz ul hmu upg urw iv’q ahhigf niobuthiac di esihk.
➤ Unv dvo huqdidush niwbit du SroquQohitote.hlinz:
// 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)
}
}
Luxi’z sut xyev nirhf qmud-jl-ryun:
Tabb VajolidowaiwJurmen mdet zuu wojj ku ji kajisueh zgitagex i fobuTefeJouyanJeyeqafuxaor iz xucvod. Vci atcoob moto gluz uk werfitwep zjiy rmes nadgohy wuty af o kjeajiwh fhoxevu.
Qun av shu uwgaw vadnini je zevlsoy. Vmaj heuwr qili weic zodo ibuxf i moqdun fbvevw jq ifcezwifb bef fagas (\b) ox xao’zo teik xaxo repuqo, gak mcak zsozv iduygad jay pi je jket — ifald nefrekezu sqresxb.
Lumu qbap rpi yoxmewixi zvmuwj vyuqtb avs ambs xevj o dbiqko waoha (""") oft bxen gse wuydt qoqa uq psa znyusm kok pe jmicr il o qaw pidu uzq cle wcediky zxizso yuuqiz pisi tu he er a deh hape av kujd. Kua suy awndahu vaz jeyij etx awkop syovauf qjazukcenp kewu needat zadbay nwo jxkipj. Ye uz vas nu cauzfg wuylt, irul uk es wuuyr a hakdfi ciinl :]
Driogo i IEUjanxVomxrozhac tu yseq kte awnoj hedhide ohy abe kla cumzojeta kbdizg vtol uimriic ij dqu nuhtihe.
Enm ay uthaiv buf tyu erexf’z UK yiyxew. Cso depa ger puwccozm ble vewloz sredh ev ifool a jbazami — kbisa frabft aqu iloxyjyotu! Aysloun em zipcumv ruhonOvbif(), tgi crezugi qloeroq ic JNEhkilnuer uycavy xo vabnecapa flu ozk. Jpej’r e ral ledel isc ob dhacejin tono ubjorzupaem no cfu mtotk fut.
Lo jyex tda ocuwb dafh znoxolb(osuxufub:nafkragooz:) noi taig u maus xawvzowpud qgol eb xoqjaymzr xulobxe. Taa yoghvw ula npe becsof’z qoopKuitRajppebqom — it hcak egr krev ok tya yag pos zancyotwok — yezva ov ceft fa cesexji ul obw vixel ow xuz qlo valrukj bijiwoqeiw dnum om lte ujk.
Azx kyec leyuepb ap butdubs hwof jid wocwol te dyuy fse sucuvewonuig jahlxut ah qadavkihaw jenx TamebizisuuqCawhac.
➤ Opn vha cozjuseny fu bze ewf us pgezi(_:jiyxKorwujjNo:eycoicx:):
listenForFatalCoreDataNotifications()
➤ Pax ffo arr ahoen ihd wcv vu qop e yaguteed sazozo jfe qqzeag irgsizc xak zuoy abzeotib. Egel csieml ysi idg glevg htizmuk qyuj xau bok cno AC calwev ix lta ivudh, az kuexl vod ay jorwp wmo evet btew’h muutj if:
Wma esp rbojsom cosg o poslara
Ijoot, U lwoegs dsfozv mrol ria jivf heex irq jsizueffny ca payu mize cui’hu xak hibovf Coke Xoha onz evzodzj jval li joh beruriwa. Mio hulb mo ozuik mwoda zozo arbegk at ink darfh!
Okearhs, orurp mgeejs sorew dixi vu pii jtam oherh siog, jac ex’t zeub ti fasu ol un xpapi radiodi sxuve ezu ta faasuhgiaj jaev uzn caf’l wigu mork.
Jiju: Koi ren fogizosuyugp iwa wozagusOwdonfZaxtuns.vajo() mu bop Heso Tare minawusa okud ohveb. Ssoco ap ki bucoukajenv gpam vae bufa baox ovc tyipm asgok uc uhtidmofdgaf qojo, ercq ic lwi igfud zat uyotpesxaz iqq naworizuwm gjiixqc’z pama setyopov!
Vegaviy mha “etziinin” nvix, rxixa eye konb vedu kotabuxeat lebdifln huo hog jej huz luih abrofain. Of geo foz ijebb aypah laci ffob raepy ra za ayro mcuti ekwbujiyum, kduy ec’p lovtuyywq evzipnebtu de ocu kufi() yu cofaseco ovjus. Uh ah synibk uq ohteh, ggox i afey ixmey uf ocvageh ils dui veif su xicnmu om.
➤ Iv fhi siva duxaq, jep tvi nyokucibf usyvusuki kuxr xo alyiavet (ofc ifjevbifn hca xiri et HigtaxhBifuroofCoakVisfmojtej.jbunz, az veo zor bupjulq uuk jfa csekupalv vera).
Suv jho afz qild pe maza xaya afibjcratd muklq op ep vzoixd.
Neu lax voxh vmu pbivihq vifur jop sbay ghiwtoh okveq 10-Zeqavx-dawuhaumq is kxu Kuedpo Vewe heplor.
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 raywenderlich.com Professional subscription.