Ответ
Стек Core Data — это набор взаимосвязанных объектов, которые управляют объектной моделью и ее персистентностью. Основные компоненты:
-
NSManagedObjectModel(Модель объектов):- Описывает схему данных (сущности, их атрибуты и взаимосвязи).
- Обычно создается визуально в
.xcdatamodeldфайле или программно.
-
NSPersistentStoreCoordinator(Координатор хранилищ):- Абстрагирует физическое хранилище данных (SQLite, XML, Binary, In-Memory).
- Связывает модель (
NSManagedObjectModel) с одним или несколькими хранилищами данных.
-
NSManagedObjectContext(Контекст управляемых объектов):- Рабочая область («scratchpad») для создания, извлечения и изменения управляемых объектов (
NSManagedObject). - Изменения в контексте не затрагивают хранилище, пока не будет вызван
save(). - Может быть разных типов: основной (main queue), приватный (background queue) или дочерний.
- Рабочая область («scratchpad») для создания, извлечения и изменения управляемых объектов (
Пример инициализации с NSPersistentContainer (рекомендуемый способ):
let container = NSPersistentContainer(name: "DataModel")
container.loadPersistentStores { description, error in
if let error = error {
fatalError("Не удалось загрузить хранилище: (error)")
}
}
let viewContext = container.viewContext // Контекст главной очереди для UI
let backgroundContext = container.newBackgroundContext() // Контекст для фоновых задач
Важные нюансы:
- Потокобезопасность: Контексты привязаны к конкретным очередям. Все взаимодействия с объектами контекста должны происходить внутри его
performилиperformAndWait. - Типы хранилищ:
NSSQLiteStoreType— для постоянного хранения,NSInMemoryStoreType— для тестирования (данные в RAM). - Миграции: Для сложных изменений схемы используется
NSMappingModelи миграция с помощьюNSMigrationManager.