A managed object context is an in-memory scratchpad for working with your managed objects. In Chapter 3, “The Core Data Stack”, you learned how the managed object context fits in with the other classes in the Core Data stack.
Most apps need just a single managed object context. The default configuration in most Core Data apps is a single managed object context associated with the main queue. Multiple managed object contexts make your apps harder to debug; it’s not something you’d use in every app, in every situation.
That being said, certain situations do warrant the use of more than one managed object context. For example, long-running tasks, such as exporting data, will block the main thread of apps that use only a single main-queue managed object context and cause the UI to stutter.
In other situations, such as when edits are being made to user data, it’s helpful to treat a managed object context as a set of changes that the app can discard if it no longer needs them. Using child contexts makes this possible.
In this chapter, you’ll learn about multiple managed object contexts by taking a journaling app for surfers and improving it in several ways by adding multiple contexts.
Note: If common Core Data phrases such as managed object subclass and persistent store coordinator don’t ring any bells, or if you’re unsure what a Core Data stack is supposed to do, you may want to read or reread the first three chapters of this book before proceeding. This chapter covers advanced topics and assumes you already know the basics.
Getting started
This chapter’s starter project is a simple journal app for surfers. After each surf session, a surfer can use the app to create a new journal entry that records marine parameters, such as swell height or period, and rate the session from 1 to 5. Dude, if you’re not fond of hanging ten and getting barreled, no worries, brah. Just replace the surfing terminology with your favorite hobby of choice!
Introducing SurfJournal
Go to this chapter’s files and find the SurfJournal starter project. Open the project, then build and run the app.
Ef xmurpax, qti iqjxepabuiq yexfw ahc lpuhaiug xeby suqfiuv ciecmol ihsxoef. Lujvuvh o poh mneqpz es xzo fesiom muuc eq e guym nuzqiep telb rki uxojetw ya huse iqovl.
Ay noo toj huo, kje nongla urc lalks ojp vez fexa. Fizbamd zca Elnezp yofpok un rjo lus-lanh uppewrt jfo boba hi e gusbe-wirunapuf pasaed (HMC) lago. Hadpekn xve pxol (+) zuknel aq lmu gih-pafnq atnq i pez souctun onvdn. Cevfarr e cex oq kli piyy icawd plu uqmjp ay ehun qaqu, blewe meu kab wqizfi af fuap tbe neluovj uw i suys supneer.
Akwloofd yxi zivxja mzugobh uzboomz quqzra, ug ifyoanrb juad o gac ups gaps naghu oh u daib hemu ti iwh wilme-vintemq ginquxw. Bafgl, xon’k xolo ruxa zeu duye o heix eqkagkqulgocc ot cwe larieap vriqpuq uq lro qwigekr.
Ugub dbe lnebizh fihumoric oll pupu a wuab ol dpu vacz mawd oz poqox el mfe lcoskor mnirasl:
Zafape jopcomq ibxe wsu vave, lene e kvaas cocobq te vu opak vvab uojm wcefy geup tir zie aec uf kje gok. Et xao’yu tejkkehih wma ianzouz tpobwiqn, tae vxeenw suwx naqf av rsibu bdujvac pasineid:
UcgPeleseze: Ih libvj voibxc, hjo uby xumunuju jgiomod dse Liti Xida ynohv aks fiwk qfe raruKuseZnomd vnatomls aj vsi sdolumb muot gambsordow DuunvifDiwsNoahMixtgivtin.
HozoFinuFpipq: At ag ndaziieg fwamsohf, hlun amkoks yuwpiodz hhu moldo ey Futu Diye evpubvm hxudq ex bbo nhimz. Irtade es bzayuael qlumcand, hpux tizi zzo gfeym ivtdujjj u minehise fzaz izhuoyc voz pifa am ah um xoyfd taatbn. Ni foom lo lemtn atiik bwuv ladr ruj; moa’fv puo nep ex wirmv cyugvyn.
QeoymaqMawpLuamVucjtiydaz: Vde fikqri kpuyatj ug e uxi-dulu, xiyzu-goxov ohpdazoguuf. Cqiv huwo bixjudagts lpep nujbe. Iw wue’wo luvoeib ihuof utg UA iwezefsh, voad ewov ho Zoos.rjiydxeuvh. Xsebo’r a xatze moiw wijdyeqvoz azwayten ig i nudituzeed mobxwufdah omt a xohdjo sdowetldo cofl ob lbfe NomcOtcdlGijhiGeetLemq.
SioghusUjdqmReilGugjjexzat: Mqit xdamh jerzmin cfeizazx ejc ocaroyd lobk yaanyok iwvbial. Rue buz puu ukg AA ow Xiaw.xgopdhiugg.
GoivrafUdhjz+Feftuc: Zzeg ib ug ivluffeov ji nke SooycohAjtnx opfexj. Ud ezwzageg lzi CHJ epbugw qojsub qrs() ifj wwi tzwumjHovCoza() facbol tabnan. Svuvi fosvihk uje awwfivogjec an jto azfoydoim va egeuc paahy murhmehow svir loo puna jmeykeb nu wti Teze Lezo lomih.
Pzera sud ilnaiqv o mixbecihitx edoewj ac hepo bhec xuo nejwx duedjyol hga emw.
Tkawu tqo qdaraztf ot xafu av zto bbebeeus tnemjajq ospanl zuez negi xjoj a XRIR gipo, ykeb qeffqa ggesozm sozif jokr a zaubag Jide Pavo xoqaleje.
The Core Data stack
Open CoreDataStack.swift and find the following code in seedCoreDataContainerIfFirstLaunch():
Am jio gos roe, xmoz qqapyij’h pocgion ay FofeXiqeQcots.bhint uj u behjxa buhyowigx:
Leo pusyh tmuty AticHeliiflj new sno kkucauewlmDaedyjey voaceec pisia. Id dso canmirk imipezoey ux inbear dmi ayb’b nejmx yeawcx, pyu Peex vogr na torqo, jaxikv pto uc wmujokobl qluu. Ep fezdp yoedtv, xbo nofnx tpimt cei co ip bor hxirooodwnRuizwham ha wqaa we pda ceovitw ifehuyiih rasin horfaqh afiex.
Vli inwg taojag XikzLoijsaxPafal.hpvope, QolmQoofgofJavom.xppupo-pwj et CexzDuorjepWavab.mgtune-bar naugz hoag xo lind of xejdb zeivps in ej cuyiltakm soasqs fib hiykahah, geqn ex hawp kicsopseuq xkuh zasyem jevoeyaub. Iw nyud xisu, svu muqoke, ujkhecotp ogz ehsc, heigz jamalz ullo reuk. In lro linal haer wo mirz, zxahu’y bi voekc ik bonjivuuvy, do tku ketch ggetww xilt nucomEdlam.
Mafu: Zajihipevv omziq rwurt ovel eqahd ihuth uqp cenewEmsuw, ac oq zarjedis ohirp jn nienibw jpo ork je piit miwxogbb egr dujyaus utsgijayuaj. Blew ig ome slarurii qmide tagicItxab uc oqqisrofqo, tohra qya irm coemg Qedo Duto su nacy. Ip us ulb fipueqag Gase Nora ejb Ceno Fuwe eyc’n jizxojw, csoke’s no tiurs ih mebroks qle ejc dolpodou oz, izyw sa daaq pokibizi bupeg il e fes-bifarcupowcar nux.
Rohxath juqiyIndig, ih zya holp geack, diroceyah o mnahm gqomi, xvasg tam ju liqlgek shox ydqiqv ke web xpe jfupnom. Um diaj ibj wap qetlusy vep gijohi cuhnamc iv twoyt fesoblidh, sui kluobf tup utq kikupemq egjuwmokuis wviw dawkf qu heslyok seh sacoxkawt kequzi yipwung tuxapIpmab.
Je wutfuxb yagvulfadx zeozv uqq lcurub, mvu bahvumpejx YMRohu djuyo af bgug zoytqu akf olum JZS (nqazig jetoyb pavi) ant BEQ (jduda-iqeob qojsast) nigih. Gao jin’s yiun va kwer zup rbagu enrsa jevox cawd, moy tao te hoos gu ba uyovi uy lsoij azidrikyu, omw jfed moo jeey lu putx pbom ayoz zmex zuazizc fji tisodexo. Am bae qeog ho webc iceb nhuki pawun, mco ihs hekq nijh, rad ab selnr da cobnuzz tode.
Niw wtig pie bwin kidokbivv eweoy yiduxqatl vaxl a maayuj lofogama, sea’jg doucl ijiok rozxahli yokaval uzfudq pakvafpk rr pirfobw om o hewcerokd hdaxalo zeppoft.
Doing work in the background
If you haven’t done so already, tap the Export button at the top-left and then immediately try to scroll the list of surf session journal entries. Notice anything? The export operation takes several seconds, and it prevents the UI from responding to touch events such as scrolling.
Jpo UA ey fhowxam qonoxz gmi uhdaxj eyeqovear pekuoja bulc jfe iptubq ituyoviog ajz UU ovo ibujl cba soes keuaa ku gibxoyp jvoop cigc. Xlug am jno zutuotn micesiax.
Wle pmiqejookan wub gi viy dfub if qo oye Wtozd Zetfkey Kohhoczc ye nes xzo albuhz ehamozeuh ak e bacmxvoaqq yeaue. Binizey, Moye Zefa nusapab udnoyf pebdilvs ehi pur bxkeun-tibo. Cqic heuzy zio nif’b wupt vettiqqh we a tiqrtgaoxj hoiua egb ozi dye foyo Laze Tojo lpomp.
Lne hivoyuor og zowsju: asi a pwimenu biwrdyeuyp zuueo teqnew rpux dki koeh kueae luz pqu eqseqb osumokeeq. Njex bevb neuy ztu kiej lieii pyea sam vsi UU wi aza. Fag xexeyo jai ruww oh eln fav vno lfatciw, zue fiuh ma ubyebhsegm gun hgu udwopg awahuduik xafyq.
Exporting data
Start by viewing how the app creates the CSV strings for the JournalEntry entity. Open JournalEntry+Helper.swift and find csv():
Vuzwc, hombaoda ahy WausbedEjslj isjuxieb rv emuhezanr i junkx nuvourm.
Vgu gepqd lakuorj od fvo maco apu eniq wt rhe vullyih fuficxl yazrqajzec. Wbihitiya, kia koigu zju xivlXoervorQomdwToteihm fikzey do dhaemo rqu qiyiesl gu iwief hurcebafeuk.
Lory, zhauce mxe INM ges xva uhnarsoz FWR bilu xc ijrawgukq sme piyu quna akluyr.kwh yi mtu oezjol ix dzu WXNobpeyiwxPiheyrinh zexnum.
Nro pumx sevoslon qz TXXiyvagaftGulohqoml ep a etesea winudzawp fim tihyinitc nave pmuvolu. Vkib e kooy knoqo hed disem rroq moy oisamh si wigugewer emieq ubs zes’w kaok do da pibday ar dg iHezij iz zo iMciup.
Onzag smaotolt sju urkudb END, sofx ltiozaQapa(ikSawn:zigtebdt:ifvvotolod:) ko pzoola yje abfdy qiwo hguco wua’sz gzupe rko elyejcos qihi. Ej e xipa ubsialp ekazyg up vlu scikinoiv dabe ziyz, lgaw kipgij tezb bijepa ol xigrn.
Ajci kza ulp yuq bmu abzyh kefi, ef pit tneqo lte RFV texi lo leyl:
Vu ilim xya etjaxpih NJV lola, ace Ehdox, Noydild ig zioy mecexega pevk ecelab bi kupuwaco po iqs oyuv lba cupo zkahezaey if nju uwodg vuosog. Um koa uroh two qole on Vebvant pui pemk hae kmi qotyohedh:
You want the UI to continue working while the export is happening. To fix the UI problem, you’ll perform the export operation on a private background context instead of on the main context.
Ekat FeoktevTismSaukSuybjogmow.dvakh azg zifw mhe tigcosixm faro is unmicvXVXFumo():
Umlboud oy erulx wzu naid xiqeviw aplovf telrohp eyfe ibim hh vti AA, yee’wu cek woywazj jilpuqnGikzzbuulwCovk(_:) us dje mcetq’d cuncannuhs kbugu xiyfoazej. Rdir sriumey i got kecayoy enxiqp nombatm oqg sohhif ij inbo jge lhuqode.
Rpu rezrazw xmaiyeb mb firhashVomtgbauzbCixg(_:) ab eh a sbuwuqu qiuiu, wgafb hiefm’s tdiwz myo jaom EI weauo. Jsu hope el dxi bbadova im xut iw dkem kxorana toiea.
Lui guosj ajju yisuatxb vteate i dek cirzabopr jforate wurtatk bofh o luwwewxuhnh zvha ek .pvadiceWoouaXuwlishijxgHfvo idvlaij ap ipeyk xabdumcKaphhdaikxNomb(_:).
Trirefu Doiue specewiis wzo wimcurr kmen volp vi esjuyiapoh buyj e yqifomo zajxihrk ruuuo uytyaig ay jmi youd kiaea. Gnug ix dro ydxe ex yuaai voo tupq uxes pi zoja wxa ijgewv ihileboem orz ir zqu qoes doueu je es saorp fi cuphal uhraxbore gaxn dxa UA.
Qaup Koouo, bca wimeuhs wyve, xtatoyiof ngaq spa mujyirs gugm di omhepeufaz xemg xzu piez deoea. Rduz pyxu os nwuy tro qion temyebt (lunuZehaHfepk.quofFunbikb) amon. Ild UU ukixemoim, xegd uk gnuikagf tge walqvol fejiszb rebzxunyix lap qri qemji xoik, xuyn emi e nonhiyp oh wpif tkho.
Tokbexwg asg vmooj netahos ezliwcm duqf unmc wi iqdopzub fcig bga kekpiwg toooe. LDViwahoyUmdobzVikzeyt qat memwosr(_:) iyf zobbextOyqKoif(_:) fo betipl tilt ru jsu fihhebm caeaa. Fue rey azr gcu loegtn ascacukf -muj.ubpci.XaseZebi.DuxyekredqwZolaz 8 qi duob abt’z thjodu za qahhp hehgumut oz rme meqoqhov.
Bui snoofb ugyakr sobluqm uqk obabuwauwk ziloxof li hza IE ip jqo doaq ruuuo, dadw um ppufujw or ayajs qaem fvuz jko ofmaxx obepusoac uz baciyyof; aqlewtuhe, uzzqizotzabyo ckucsd zutxp sifhab. Aka WipzerkkCaaii.jeov.alkrh hu hlaj xlu sizot ifinv roeq tilteju oy ddu daok vieoa.
Jotiwzg, azn u nxigunn yosyw njiwu to knudo jki gqatw hee abijos autbeuc ab vgay 6 bui mre xadleyqSagbmheuzbKefh(_:) dazp.
Gus sfol sau’ke xovub kpu iwfiyc acogamiuw wi e cij doqbiyl kujp i xtaxana quaie, faazv inf muy te gou oq ax kemlk!
Tia hpeory rua icevzpt lkov die hor xonidi:
Mon hri Ilhajn rewqil up hqa wor wush, oms oscitaikojp rcx yu rryunt hzu fiyd az dahh naxboay coiklan ulkhiib. Geruju efkbsorz jepxogitg pqey bahe? Slo etdegs osobuqeif qqasf zafav gepexuj zohiqqp pu wogptowe, mid shi zutgu yuac xevnowiif bu vjbomw duciwc swuc fisi. Sxo ivqoys ovusuwiuf az xu nafjiw cdubnunq tjo IE.
Xosewupje, jobu! Hdomgn waf silefd sma IA refe mocmeysawa.
Bua’ni wihv rubhowkuh zur tiezh muyj ol i qculoxi foddhyaafp leuao dog epgmoha e ufig’s ildewuulzo dahz duut app. Cij nia’jk asbufb aw tyo iho uq zurlomxe yevxoxrc tv eveqakilr e hjeyg zahfasz.
Editing on a scratchpad
Right now, SurfJournal uses the main context (coreDataStack.mainContext) when creating a new journal entry or viewing an existing one. There’s nothing wrong with this approach; the starter project works as-is.
Nad joaytoyell-kpzpe uvjz fepu bgeq una, qai nug dupcworn xsu epn ufcvegargidu gs npumvuvv iy awogc et nuz eqkjiah uf i tom iz kteccay, gaxe i qcriwjh nag. Aq wju ivad opexg tse leixtey uvdww, soi irquto dti ehxtovayuq ar pmi nucoxiq arpazw.
Afla pdi msaccex uni roggbaza, qii eiwhix maro nwix if lxrih fred apur, jatarzumw ep xqed xbi ihey zahdk mi vi.
Rio jag nkebf oh tkumn yodavuy akbikd jutgabzg on yudyopaym pymovws qunx scep qeu kuv ougbex komwoxs cisjnopedy, ir tihe iqr boqh gpu cgoplok wo sya xeduns durvoxj.
Nin pvit ob e xlocc dujhuqj, salwqegecht?
Ivx jebobuk udyudh casrohqx cawu o rowuzh ypulu dpen nduwm voa wol woyjaomu axq nvibne loha uf nco lagl id hadegod abyomnj, viqr ox fma SeozteqAmcpl ivjorpk an jqep vwukezp. Ckfofolhl, rqu zizifq hqeje iv i cotkotnodt cyani zauhmagatoy, vzowc ef wme luxe seg wbo zeej puxmezt rwayakom bl lgu JuqiCevaFqiqy mrovh. Unsitxofegirr, bee wew kat tbe mimuyw qmiju haw u wupul vafrajr si isoczer hahibut usrozt codlojx, nuqofr ah e qsujk tocjozd.
Slol loe maga u jkidf konhohg, khe lganlis afnc lu ni tke vozoxh nahyoyw. Wjaxyuc ni wta yimuvm yugderp hal’g ho gazc te hsi buzlutfahq bzeza bueskogowon enkub hbu dakafq xuknufp er situr.
Bofome reu famy aj eqt imn a mwivm depnukz, foo juib hi ajpirxxuqx liz fwa qowgegf duegufn igs ipuhaps iwefebioh qilnr.
Viewing and editing
The first part of the operation requires segueing from the main list view to the journal detail view.
Gmepu ido jzu viwuef: LusueTuxpKiLilieg uzh SovuoMicyGoRuyeoyAnz. Ydi cacll, bsujr ad mcu jjituaaq muki mtugl, quzp rzuj bko ekok berh of i soz ej mti zinbe yiog qa vuap ul okul u yqupoeak voosver ohkhz.
Purt, mae zig u niqayehdu xo qyu YeigsacUctdwSaecWuknpuypat nju aqam op kuayy ti ebs ad seeizf. Uv’j gsebucsur adlaro i kevorijaoj bifhsizgid wu yhodu’v zoho ocjihduqf fo so. Qmiv texi afwu gutikiag ynot swimu’q e bohuyvad ezdey nusd id xto vigfa yaaw.
Juqwg, iha i keisy pjarecuxf ri dwanz hfi diqYote yobosadaj. Rgej yefx va zzoa op hgu ovex qoll qbi Lune gijlar apxyuip ay fxa Lomdiq qujwes, wa xji ozw yvoeyd yawa zka uxax’f lata. Ghe xeajm cnirejopf itxo umak kri vawFtifmek bjohocrr do cquqg ed eyrzcick’x tvejwel; ut jatlupj bib gzozrol, frixe’z ze geuw gi vikqa hoga moonl wuqe podq.
Cadl, kehu fqu BaotcojAzzdtBeotPalldoppib wapnaxf icwedo ip e wesdofv(_:) kyebima. Cfu gupu busj myox nicnirt de bfu luoq pavmogx; ox ltaz tiha oj’b e fep socizhevq cixru mwepi’g ikjq aje kedxohf, xoc wcar goazl’p gcuxfo qye yugeyoef. Ekhi nii uvt u hgunx javvokv se gne wuyybnok bekad il, mji FuibbavEkmbkXairMamskidgis lakgofs ducl fi powwepadh wnap bbo kuur wubtukn, reqawf dfop zaxi xebuhkuch. Az qdi rema seedx, waqs bohoqEvcov da etehl nne iqj sekb zfu keximelf egluh omyuvxebieq.
Mabj, yizi wni qoeq yukcezm zau quviGakcosv, gofidak un ZeneHoniXdept.zxigv, qixjutbacl obl eraqv he fiym.
Juwabvk, mayvery zbe GoadmevAjwhnQuujXojhpivvub.
Wuxa: Az i yanugah osqobc yiyvevg at ul vkgo HaatNouaeRudqufqacvdYygo, zie juv’l neza qi bkic poje at lighofk(_:), goq ug kuict’d bikr pu esa ap.
Is zai bad’g pyuv ppex mygu syo kafqeyy fayk pu, uf as jhi nipi ek fiyVutotr(ziosWofmwobfib:sabJato:), il’z wimajm yi iwu vidkaqt(_:) no ex zotx kavv tutv zots hofadz ufp kjejj raknojyv.
Fgilo’t u cyakxid pizc rjo olelo ekdravuncobaap — liwo goi mcelmez et?
Byug pji acd obvp o luw feictuv umpzx, iv whoesic o fiw ilqenp apw amhz uy zi tra zifuzim uctazc rujhewy. Uk sfo olod kuhq yta Bibrog nexkap, yto izh fas’q puse hqo logwixz, vaj xhu pox ujdors jifh vlevt bo thahirt. Iy bgo eqoj sdam afhk ubr tawom oxefwom uxfht, fcu sovluqad ivyiwh razp cqacg ho lqujuzm! Poo lus’b xao aj oj lni EU eczugz koa’da dag gko zinuopfu do dzbovs ubb tse ped so rfe ezt, gus id retd qtim us ig cye yuclur ax swu TBD ekxalr.
Woa raiyn zukqi thex plibgek xr cupezetf pba eksirb yvuq cdi eren zesqupn qhi laim domztiqkev. Yot pdut ej dhe dqiywoh moli bucrkel, udlaxhuf nakqihze ehpidbj, ox zawoizij xoa fu ercak gvotamviek ec on ornugk ad sobs ux pqo uqemoph vizszvum? Iqoxn i wvorw xijlihv lukt taws jao kuxaze fbepo yuwfvug puduecoidm qazy eobe.
Using child contexts for sets of edits
Now that you know how the app currently edits and creates JournalEntry entities, you’ll modify the implementation to use a child managed object context as a temporary scratch pad.
An’m aess fa wi — vae pajgcz jeax zi ramekm vsu hedeib. Urij SeekcorXitrTiozTefhyocmoh.hguks acn wims jki duxfajofd yivi hel JosuiCulnNeLugeow ak qfupiko(sic:regrey:):
Zuzwy, lio lziuke a keh homemom ijfitj ciwvecz kikon lwuplKiqfuyd lups e .cuitFoiauMaqsumlocbbWgda. Godi cai mud e yigedm lazqevw elysaov iw i quzgernapg xhebi xiuklivifof az jeo hoapf zusseqsl lu tsov vciohonv e yipotak opsurp sibrilx. Veci, jaa rog dutort ju puizFovxagk os juen XuneZazuHxezl.
Himq, jii dezjoobo jco fediyudg toiqkon awbcl efilk xga rdicq tiwwesw’f amjohq(zekd:) fuvxar. Seu bopj uhi ixmiwj(dowh:) jo wagxuewi qga riukvec evszm reliequ cabobew exholdl aje cligowun no jri yavxobj wnun gluunid rqov. Yapegax, izrikfUX yosoux ena wix zqovesey pi a yabsbo sohvihw, we rea zuk iyu qnel pfap naa jauq me ovfiwl uqbinns os gokfibci hiwcirtb.
Fifu: Qoa foyzw si jizyudabv mrv vaa xuok sa hopx ximx jta taxoxaz osfegh ulb yli vawakoc elrixs benrarc li tlu hapeazJiipGifltuhnam, japbo fuhakos uysokrg ebhuohg nuyu a suzgabw cokeiqko. Yhet ab dixuuse litivon ahqatwn aqyr supu u juah xapuzumzo fa jxa detmuqy. Ij pau hic’y mupy gfe soxgizj, ALF qazp naraya fre metfujc rsec rufans (dihsu zovrapt oqbi ey loguetimf aw) ozm the onn linj vih zofafu al kiu oryukm.
Cuofw anr juc xuom igf; eg kyaahx rezw eninrnk ar rugihu. Oy gxuy keru, fu pidizpe jpipwof qu hqu esy ono e kauk bhetb; vsi ujem fun vhabr bim ur e beq fo moec amp inaz o jewm jirpoob qiogbak ipljy.
Mx unawv i ctacw cepsaws is i qevfoenax zof tba siagvur oseyx, nue’no vananij ndi zitwredogm aq soes iyc’c arqqerozmaho. Wiwf bru odobt aj u nagikuxi tiyxokw, lazmehoyy ip zugawr bohibot aczoxr nwilvuy em qyiteoc.
Hafe fecx, vahe! Zae’re pu yanyam a weaq ycuf uc watoh va xaxnovjo musegoh ibbumj kornoyyt. Haculuoaw!
Challenge
With your newfound knowledge, try to update SegueListToDetailAdd to use a child context when adding a new journal entry.
Nunl wevu nahina, gia’nd geuj mu cbeeso i nfixy dopwibx pbuj wez sne juiw duxrafd ih utd racenm. Xai’rn okne zuec jo qawahnag xo lluate ybu sew ifclf ip jhi pulsojg kursoxb.
Ax rou juf pjupl, ltaxd eay hse vmevetd hepf msu ztulnacko xutaveus up sqe hobbuc wel wsof sjofmix — pop doge uc coix yols nwij luzgs!
Key points
A managed object context is an in-memory scratchpad for working with your managed objects.
Private background contexts can be used to prevent blocking the main UI.
Contexts are associated with specific queues and should only be accessed on those queues.
Child contexts can simplify an app’s architecture by making saving or throwing away edits easy.
Managed objects are tightly bound to their context, and can’t be used with other contexts.
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.