Core-Data-Stack: NSPersistentContainer einrichten
Richten Sie Persistent Container, Context und Coordinator in einer SwiftUI-App ein.
Core-Data-Stack: NSPersistentContainer einrichten ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.
Überblick über Core Data
Core Data ist Apples Framework für Objektgraphen und Persistenz. Es verwaltet SQLite (oder andere Stores) über eine objektorientierte API.
import CoreData
// Key classes: NSPersistentContainer, NSManagedObjectContext
// NSManagedObject, NSFetchRequestNSPersistentContainer erstellen
Initialisieren Sie NSPersistentContainer mit dem Namen Ihres .xcdatamodeld-Modells und laden Sie die persistenten Stores.
let container = NSPersistentContainer(name: "MyModel")
container.loadPersistentStores { desc, error in
if let error { fatalError("Core Data failed: \(error)") }
}Das Persistence-Controller-Muster
Kapseln Sie den Container in einer Singleton- (oder injizierbaren) PersistenceController-Struktur, um appweit sauber darauf zuzugreifen.
struct PersistenceController {
static let shared = PersistenceController()
let container: NSPersistentContainer
init() {
container = NSPersistentContainer(name: "MyModel")
container.loadPersistentStores { _, error in
if let error { fatalError("\(error)") }
}
}
}viewContext und backgroundContext
viewContext ist der Kontext für den Haupt-Thread und die Benutzeroberfläche. Verwenden Sie newBackgroundContext() für aufwendige Vorgänge.
let viewCtx = PersistenceController.shared.container.viewContext
let bgCtx = PersistenceController.shared.container.newBackgroundContext()Managed Objects erstellen
Fügen Sie neue Objekte mit NSEntityDescription.insertNewObject oder dem Initializer der generierten Klasse ein.
let item = Item(context: viewCtx)
item.timestamp = Date()
try? viewCtx.save()Objekte abrufen
Verwenden Sie NSFetchRequest, um Core-Data-Objekte mit Prädikaten und Sortierdeskriptoren abzufragen.
let request: NSFetchRequest<Item> = Item.fetchRequest()
request.sortDescriptors = [NSSortDescriptor(key: "timestamp", ascending: false)]
let items = try? viewCtx.fetch(request)Den Kontext speichern
Rufen Sie immer context.save() auf, um Änderungen zu persistieren. Verwenden Sie in produktivem Code einen do-catch-Block.
do {
try viewCtx.save()
} catch {
print("Save failed: \(error)")
viewCtx.rollback()
}SwiftUI-Integration mit @FetchRequest
Verwenden Sie @FetchRequest in SwiftUI-Views, damit die Benutzeroberfläche bei Änderungen an Core Data automatisch aktualisiert wird.
struct ItemList: View {
@FetchRequest(
sortDescriptors: [SortDescriptor(\Item.timestamp, order: .reverse)]
) var items: FetchedResults<Item>
var body: some View {
List(items) { Text($0.timestamp!.formatted()) }
}
}viewContext in SwiftUI injizieren
Geben Sie viewContext über die SwiftUI-Umgebung weiter, damit Views Core Data lesen und schreiben können.
@main
struct MyApp: App {
let persistence = PersistenceController.shared
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.managedObjectContext, persistence.container.viewContext)
}
}
}Objekte löschen
Rufen Sie context.delete(object) auf und speichern Sie anschließend, um ein Objekt dauerhaft zu entfernen.
viewCtx.delete(item)
try? viewCtx.save()In-Memory-Store für Tests
Verwenden Sie einen In-Memory-Store, damit während von Unit-Tests nicht auf die Festplatte zugegriffen wird.
let desc = NSPersistentStoreDescription()
desc.type = NSInMemoryStoreType
container.persistentStoreDescriptions = [desc]
container.loadPersistentStores { _, _ in }Kurze Überprüfung
Welcher NSPersistentContainer-Kontext sollte für UI-gesteuerte Lese- und Schreibvorgänge in Core Data verwendet werden?
Zusammenfassung der Lektion
Richten Sie Core Data mit NSPersistentContainer ein, laden Sie die Stores und kapseln Sie den Container in einem PersistenceController. Verwenden Sie viewContext im Haupt-Thread und newBackgroundContext() für aufwendige Aufgaben. Integrieren Sie Core Data über @FetchRequest und den Environment-Key für den Managed-Object-Kontext in SwiftUI.
Häufig gestellte Fragen
Ist die Lektion „Core-Data-Stack: NSPersistentContainer einrichten“ kostenlos?
Ja — der vollständige Text von „Core-Data-Stack: NSPersistentContainer einrichten“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Core-Data-Stack: NSPersistentContainer einrichten“?
Richten Sie Persistent Container, Context und Coordinator in einer SwiftUI-App ein. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Swift Academy zu starten?
Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Core-Data-Stack: NSPersistentContainer einrichten“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?
Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Core-Data-Stack: NSPersistentContainer einrichten
- SwiftData @Model und ModelContext
- Beziehungen und Fetch Descriptors
- Einfache Migrationen und CloudKit-Synchronisierung