0Pricing
Swift Academy · Урок

Стек 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 — локальная установка не требуется.

Все уроки этого курса

  1. Стек Core Data: настройка NSPersistentContainer
  2. SwiftData @Model и ModelContext
  3. Связи и дескрипторы выборки
  4. Облегчённые миграции и синхронизация CloudKit
← Назад к Swift Academy