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, NSFetchRequestTworzenie 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
- Stos Core Data: konfiguracja NSPersistentContainer
- SwiftData @Model i ModelContext
- Relacje i deskryptory pobierania
- Lekkie migracje i synchronizacja z CloudKit