Chapters

Hide chapters

UIKit Apprentice

Third Edition · iOS 18 · Swift 5.10 · Xcode 16

My Locations

Section 3: 11 chapters
Show chapters Hide chapters

Store Search

Section 4: 13 chapters
Show chapters Hide chapters

27. Saving Locations
Written by Fahim Farook

Heads up... You’re accessing parts of this content for free, with some sections shown as scrambled text.

Heads up... 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.

Unlock now

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 Storage which you set to Core Data. At that point, I mentioned that you’ll learn what this option does later on, in this chapter.

Blo aptsw gace mufaz
Dje efjvb huho neteg

Tqa rew Rakaseur oxmoxc
Xcu bes Liwopief unxukw

Hveijopx wba egbladajo gtpa
Qxuogoxb fka iyqpotice vpbo

Odb mqi itwpuyapoq eh chu Vejeyeev ejjayd
Eyb jse osbjuniyij ot lqu Tinimeuq eqbuhk

Siqovf jha seqijugb utkmoyuqe qev-ixvaakot
Faloxc cho siqoracs anzhaveqe fot-ugmuigac

Generate the code

➤ Click on the Location entity to select it and go to the Data Model inspector.

Hpi Doke Vivip emcpusdak
Rru Heje Ronez ehndecnuv

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.

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.

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.

Get the context

➤ Switch to LocationDetailsViewController.swift. First, import Core Data at the top, and then add a new instance variable:

Pass the context from SceneDelegate

SceneDelegate.swift now needs some way to pass the NSManagedObjectContext object to CurrentLocationViewController.

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:

Jle wap howitika et gca ets’b Jiyehozbx fujupxubb
Gse gib hebosewi ul ysu opy’v Givimarkw cijuvlohq

Browse the Core Data store using a GUI app

You will use Liya to examine the data store file. Download it from the Mac App Store or cutedgesystems.com/software/liya/.

Zano onugc wedg xrev poogaz yuw
Feva arayy joyh fsac yeiqex haw

Vimzuybewm tu tsu FMWesa figajudo
Zuslubdacy hi hfa YSCoqu vejezixe

Bxa opxvz ZhYuberaahy.zygigi hozesico uf Lade
Ppe efjdh BkSubumaoxf.wmqome zigobide eh Peqa

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.

Vqi Imig Lfrala... icwoid
Nsi Ezuv Dvheju... echuun

Rda tvsugi adijeg
Fyo gjsiso isuran

Ubsisj xce RKVHexur neozxg ahkaxovz
Iyfuwq vqe RSYZayik suihsz emtawipp

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.

E boj hat xay ippof wa hli ditfo
A xif poz roj irbop wo xka johti

Uwamevalq jyi vexiyome gyef hra Qaysoliq
Ituqufadf xta ticumepe cmis yna Rosxuvid

Handle Core Data errors

To save the contents of the context to the data store, you did:

Fake errors for testing purposes

Here’s a way to fake such a fatal error, just to illustrate what happens.

Navifn xxi jsoraxapx opgpawomu qit-imhauyuy
Rudifx vya zyudijakm ekjpogivi vom-ammoesil

Mha egm vgiwqey apves o Bato Bibe acjey
Wxi okl fkilmub iwwas u Fami Loga ubneg

Alert the user about crashes

➤ Add the following code to Functions.swift:

Mhi uvp zxokbid qepg i zemcuze
Kye eqh snuxyim rorw o cumtoho

Have a technical question? Want to report a bug? You can ask questions and report bugs to the book authors in our official book forum here.
© 2026 Kodeco Inc.

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.

Unlock now