Bird
Raised Fist0
iOS Swiftmobile~5 mins

Core Data overview in iOS Swift

Choose your learning style10 modes available
Introduction

Core Data helps you save and manage app data easily on your device. It keeps your app's information safe and organized.

You want to save user notes or settings that stay after the app closes.
You need to store a list of items like contacts or tasks.
Your app needs to remember user progress or scores.
You want to organize data with relationships, like books and authors.
You want to fetch and display data quickly and efficiently.
Syntax
iOS Swift
import CoreData

// Create a data model file (.xcdatamodeld) in your project

// Use NSManagedObject subclasses to represent data entities

// Use NSPersistentContainer to set up Core Data stack
let container = NSPersistentContainer(name: "ModelName")
container.loadPersistentStores { description, error in
  if let error = error {
    fatalError("Failed to load Core Data stack: \(error)")
  }
}

// Use context to save or fetch data
let context = container.viewContext

Core Data uses a data model file to define your data structure visually.

NSPersistentContainer simplifies setting up Core Data in your app.

Examples
This class represents a Person entity with name and age fields.
iOS Swift
// Define an entity class
class Person: NSManagedObject {
  @NSManaged var name: String?
  @NSManaged var age: Int16
}
This code creates and saves a new Person object.
iOS Swift
// Save a new Person
let person = Person(context: context)
person.name = "Alice"
person.age = 30
try? context.save()
This fetches all saved Person objects from Core Data.
iOS Swift
// Fetch all Person objects
let request = NSFetchRequest<Person>(entityName: "Person")
let people = try? context.fetch(request)
Sample App

This SwiftUI app shows a list of people saved in Core Data. You can add a new person by tapping the button. The list updates automatically.

iOS Swift
import SwiftUI
import CoreData

struct ContentView: View {
  @Environment(\.managedObjectContext) private var viewContext
  @FetchRequest(entity: Person.entity(), sortDescriptors: []) private var people: FetchedResults<Person>

  var body: some View {
    VStack {
      List(people, id: \.objectID) { person in
        Text(person.name ?? "Unknown")
      }
      Button("Add Person") {
        let newPerson = Person(context: viewContext)
        newPerson.name = "New Person"
        newPerson.age = 30
        try? viewContext.save()
      }
    }
  }
}

@main
struct CoreDataApp: App {
  let container = NSPersistentContainer(name: "ModelName")

  init() {
    container.loadPersistentStores { _, error in
      if let error = error {
        fatalError("Core Data failed to load: \(error)")
      }
    }
  }

  var body: some Scene {
    WindowGroup {
      ContentView()
        .environment(\.managedObjectContext, container.viewContext)
    }
  }
}
OutputSuccess
Important Notes

Always save the context after adding or changing data to keep it stored.

Use @FetchRequest in SwiftUI to automatically update UI when data changes.

Core Data can handle complex data and relationships, but start simple.

Summary

Core Data stores and manages app data on the device.

Use NSPersistentContainer to set up Core Data easily.

Use NSManagedObject subclasses to represent your data entities.

Practice

(1/5)
1. What is the main purpose of Core Data in an iOS app?
easy
A. To manage app animations
B. To store and manage app data on the device
C. To handle network requests
D. To design the app's user interface

Solution

  1. Step 1: Understand Core Data's role

    Core Data is used to save and manage data locally on the device.
  2. Step 2: Compare with other options

    UI design, network handling, and animations are handled by other frameworks, not Core Data.
  3. Final Answer:

    To store and manage app data on the device -> Option B
  4. Quick Check:

    Core Data = Data storage [OK]
Hint: Core Data is about data storage, not UI or network [OK]
Common Mistakes:
  • Confusing Core Data with UI frameworks
  • Thinking Core Data manages network calls
  • Assuming Core Data handles animations
2. Which class is used to set up Core Data stack easily in Swift?
easy
A. NSPersistentContainer
B. NSManagedObject
C. UIViewController
D. URLSession

Solution

  1. Step 1: Identify Core Data setup class

    NSPersistentContainer simplifies setting up Core Data stack.
  2. Step 2: Exclude unrelated classes

    NSManagedObject represents data, UIViewController manages UI, URLSession handles networking.
  3. Final Answer:

    NSPersistentContainer -> Option A
  4. Quick Check:

    Setup Core Data = NSPersistentContainer [OK]
Hint: NSPersistentContainer sets up Core Data stack [OK]
Common Mistakes:
  • Choosing NSManagedObject for setup instead of data model
  • Confusing UI or network classes with Core Data setup
  • Using outdated Core Data setup methods
3. Given this Swift code snippet, what type is 'person'?
let person = Person(context: context)
medium
A. An instance of NSManagedObject subclass
B. A UIViewController instance
C. A plain Swift struct
D. A network request object

Solution

  1. Step 1: Recognize 'Person' as NSManagedObject subclass

    In Core Data, entities are represented by NSManagedObject subclasses like Person.
  2. Step 2: Exclude other types

    UIViewController is for UI, struct is not used here, network object unrelated.
  3. Final Answer:

    An instance of NSManagedObject subclass -> Option A
  4. Quick Check:

    Core Data entity = NSManagedObject subclass [OK]
Hint: Core Data entities are NSManagedObject subclasses [OK]
Common Mistakes:
  • Thinking Person is a struct or class unrelated to Core Data
  • Confusing UI or network classes with data entities
  • Not recognizing Core Data context usage
4. What is wrong with this Core Data fetch request code?
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Person")
let results = try context.fetch(request) as? [Person]
print(results.count)
medium
A. NSFetchRequest cannot be used with context.fetch
B. Entity name "Person" is invalid
C. print(results.count) will cause a syntax error
D. Casting fetch results to [Person] may fail without specifying generic type

Solution

  1. Step 1: Analyze fetch request generic type

    Using NSFetchRequest<NSFetchRequestResult> returns generic results; casting to [Person] may fail.
  2. Step 2: Correct approach

    Use NSFetchRequest<Person> to get typed results and avoid unsafe casting.
  3. Final Answer:

    Casting fetch results to [Person] may fail without specifying generic type -> Option D
  4. Quick Check:

    Use typed NSFetchRequest to avoid cast issues [OK]
Hint: Use typed NSFetchRequest to avoid casting errors [OK]
Common Mistakes:
  • Ignoring generic type in NSFetchRequest
  • Assuming entity name is wrong without checking
  • Thinking context.fetch is invalid usage
5. You want to save a new 'Task' entity with a 'title' attribute using Core Data. Which sequence correctly saves the data?
hard
A. Create Task object, set title, call URLSession to save
B. Create Task object, set title, call print() to save
C. Create Task object, set title, call context.save() inside do-catch
D. Create Task object, set title, no need to save context

Solution

  1. Step 1: Create and set attributes on Task object

    Instantiate Task with context and assign the title attribute.
  2. Step 2: Save context with error handling

    Call context.save() inside a do-catch block to persist changes safely.
  3. Final Answer:

    Create Task object, set title, call context.save() inside do-catch -> Option C
  4. Quick Check:

    Save Core Data changes with context.save() [OK]
Hint: Always call context.save() inside do-catch to persist data [OK]
Common Mistakes:
  • Forgetting to call context.save() after changes
  • Using print or network calls to save data
  • Ignoring error handling when saving
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard