Стек Core Data: настройка NSPersistentContainer
Настройте постоянный контейнер, контекст и координатор в приложении SwiftUI.
«Стек Core Data: настройка NSPersistentContainer» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
Обзор Core Data
Core Data — это фреймворк Apple для работы с графом объектов и их сохранением. Он управляет SQLite (или другими хранилищами) через объектно-ориентированный API.
import CoreData
// Key classes: NSPersistentContainer, NSManagedObjectContext
// NSManagedObject, NSFetchRequestСоздание NSPersistentContainer
Инициализируйте NSPersistentContainer с именем модели .xcdatamodeld и загрузите постоянные хранилища.
let container = NSPersistentContainer(name: "MyModel")
container.loadPersistentStores { desc, error in
if let error { fatalError("Core Data failed: \(error)") }
}Шаблон контроллера сохранения данных
Оберните контейнер в одиночный (или внедряемый) тип PersistenceController, чтобы обеспечить удобный доступ к нему из разных частей приложения.
struct PersistenceController {
static let shared = PersistenceController()
let container: NSPersistentContainer
init() {
container = NSPersistentContainer(name: "MyModel")
container.loadPersistentStores { _, error in
if let error { fatalError("\(error)") }
}
}
}viewContext и backgroundContext
viewContext — это контекст главного потока для интерфейса. Для ресурсоёмких операций используйте newBackgroundContext().
let viewCtx = PersistenceController.shared.container.viewContext
let bgCtx = PersistenceController.shared.container.newBackgroundContext()Создание управляемых объектов
Вставляйте новые объекты с помощью NSEntityDescription.insertNewObject или инициализатора сгенерированного класса.
let item = Item(context: viewCtx)
item.timestamp = Date()
try? viewCtx.save()Получение объектов
Используйте NSFetchRequest, чтобы запрашивать объекты Core Data с предикатами и дескрипторами сортировки.
let request: NSFetchRequest<Item> = Item.fetchRequest()
request.sortDescriptors = [NSSortDescriptor(key: "timestamp", ascending: false)]
let items = try? viewCtx.fetch(request)Сохранение контекста
Всегда вызывайте context.save(), чтобы сохранить изменения. В рабочем коде обрабатывайте вызов конструкцией do-catch.
do {
try viewCtx.save()
} catch {
print("Save failed: \(error)")
viewCtx.rollback()
}Интеграция со SwiftUI через @FetchRequest
Используйте @FetchRequest в представлениях SwiftUI, чтобы интерфейс автоматически обновлялся при изменениях в 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()) }
}
}Внедрение viewContext в SwiftUI
Передайте viewContext через окружение SwiftUI, чтобы представления могли читать и изменять данные Core Data.
@main
struct MyApp: App {
let persistence = PersistenceController.shared
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.managedObjectContext, persistence.container.viewContext)
}
}
}Удаление объектов
Вызовите context.delete(object), а затем сохраните контекст, чтобы окончательно удалить объект.
viewCtx.delete(item)
try? viewCtx.save()Хранилище в памяти для тестирования
Используйте хранилище в памяти, чтобы во время модульных тестов не обращаться к диску.
let desc = NSPersistentStoreDescription()
desc.type = NSInMemoryStoreType
container.persistentStoreDescriptions = [desc]
container.loadPersistentStores { _, _ in }Быстрая проверка
Какой контекст NSPersistentContainer следует использовать для чтения и записи данных Core Data, выполняемых интерфейсом?
Итоги урока
Настройте Core Data с помощью NSPersistentContainer, загрузите хранилища и оберните контейнер в PersistenceController. Используйте viewContext в главном потоке, а newBackgroundContext() — для ресурсоёмкой работы. Интегрируйте Core Data со SwiftUI через @FetchRequest и ключ окружения для контекста управляемых объектов.
Часто задаваемые вопросы
Урок «Стек Core Data: настройка NSPersistentContainer» бесплатный?
Да — полный текст урока «Стек Core Data: настройка NSPersistentContainer» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.
Чему я научусь в уроке «Стек Core Data: настройка NSPersistentContainer»?
Настройте постоянный контейнер, контекст и координатор в приложении SwiftUI. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Стек Core Data: настройка NSPersistentContainer»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Стек Core Data: настройка NSPersistentContainer
- SwiftData @Model и ModelContext
- Связи и дескрипторы выборки
- Облегчённые миграции и синхронизация CloudKit