0Pricing
Swift Academy · Lekcja

Stos Core Data: konfiguracja NSPersistentContainer

Konfigurowanie kontenera trwałości, kontekstu i koordynatora w aplikacji SwiftUI.

Stos Core Data: konfiguracja NSPersistentContainer to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Przegląd Core Data

Core Data to obiektowy graf i framework trwałości danych firmy Apple. Zarządza bazą SQLite (lub innymi magazynami) za pomocą obiektowego API.

import CoreData
// Key classes: NSPersistentContainer, NSManagedObjectContext
// NSManagedObject, NSFetchRequest

Tworzenie NSPersistentContainer

Należy zainicjalizować NSPersistentContainer nazwą modelu .xcdatamodeld, a następnie załadować magazyny trwałe.

let container = NSPersistentContainer(name: "MyModel")
container.loadPersistentStores { desc, error in
  if let error { fatalError("Core Data failed: \(error)") }
}

Wzorzec kontrolera trwałości

Należy opakować kontener w singleton (lub wstrzykiwaną) strukturę PersistenceController, aby zapewnić przejrzysty dostęp w całej aplikacji.

struct PersistenceController {
  static let shared = PersistenceController()
  let container: NSPersistentContainer
  init() {
    container = NSPersistentContainer(name: "MyModel")
    container.loadPersistentStores { _, error in
      if let error { fatalError("\(error)") }
    }
  }
}

viewContext i backgroundContext

viewContext to kontekst głównego wątku przeznaczony dla interfejsu użytkownika. Do ciężkich operacji należy używać newBackgroundContext().

let viewCtx = PersistenceController.shared.container.viewContext
let bgCtx = PersistenceController.shared.container.newBackgroundContext()

Tworzenie obiektów zarządzanych

Nowe obiekty należy wstawiać za pomocą NSEntityDescription.insertNewObject lub inicjalizatora wygenerowanej klasy.

let item = Item(context: viewCtx)
item.timestamp = Date()
try? viewCtx.save()

Pobieranie obiektów

Należy użyć NSFetchRequest, aby wyszukiwać obiekty Core Data za pomocą predykatów i deskryptorów sortowania.

let request: NSFetchRequest<Item> = Item.fetchRequest()
request.sortDescriptors = [NSSortDescriptor(key: "timestamp", ascending: false)]
let items = try? viewCtx.fetch(request)

Zapisywanie kontekstu

Aby utrwalić zmiany, zawsze należy wywołać context.save(). W kodzie produkcyjnym należy opakować wywołanie w do-catch.

do {
  try viewCtx.save()
} catch {
  print("Save failed: \(error)")
  viewCtx.rollback()
}

Integracja ze SwiftUI za pomocą @FetchRequest

Należy użyć @FetchRequest w widokach SwiftUI, aby interfejs automatycznie aktualizował się po zmianach w Core Data.

struct ItemList: View {
  @FetchRequest(
    sortDescriptors: [SortDescriptor(\Item.timestamp, order: .reverse)]
  ) var items: FetchedResults<Item>
  var body: some View {
    List(items) { Text($0.timestamp!.formatted()) }
  }
}

Wstrzykiwanie viewContext do SwiftUI

Należy przekazać viewContext przez środowisko SwiftUI, aby widoki mogły odczytywać dane z Core Data i je zapisywać.

@main
struct MyApp: App {
  let persistence = PersistenceController.shared
  var body: some Scene {
    WindowGroup {
      ContentView()
        .environment(\.managedObjectContext, persistence.container.viewContext)
    }
  }
}

Usuwanie obiektów

Należy wywołać context.delete(object), a następnie zapisać kontekst, aby trwale usunąć obiekt.

viewCtx.delete(item)
try? viewCtx.save()

Magazyn w pamięci do testów

Należy używać magazynu w pamięci, aby podczas testów jednostkowych nie zapisywać danych na dysku.

let desc = NSPersistentStoreDescription()
desc.type = NSInMemoryStoreType
container.persistentStoreDescriptions = [desc]
container.loadPersistentStores { _, _ in }

Szybkie sprawdzenie

Którego kontekstu NSPersistentContainer należy używać do odczytu i zapisu danych Core Data obsługiwanego przez interfejs użytkownika?

Podsumowanie lekcji

Konfigurację Core Data należy rozpocząć od NSPersistentContainer, załadować magazyny i opakować całość w PersistenceController. Należy używać viewContext w głównym wątku, a newBackgroundContext() do ciężkich operacji. Integrację ze SwiftUI zapewniają @FetchRequest i klucz środowiska zarządzanego kontekstu obiektów.

Często zadawane pytania

Czy lekcja „Stos Core Data: konfiguracja NSPersistentContainer” jest bezpłatna?

Tak — pełny tekst „Stos Core Data: konfiguracja NSPersistentContainer” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Stos Core Data: konfiguracja NSPersistentContainer”?

Konfigurowanie kontenera trwałości, kontekstu i koordynatora w aplikacji SwiftUI. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Stos Core Data: konfiguracja NSPersistentContainer”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Stos Core Data: konfiguracja NSPersistentContainer
  2. SwiftData @Model i ModelContext
  3. Relacje i deskryptory pobierania
  4. Lekkie migracje i synchronizacja z CloudKit
← Powrót do Swift Academy