0Pricing
Swift Academy · レッスン

Core Dataスタック:NSPersistentContainerの設定

SwiftUIアプリで永続コンテナ、コンテキスト、コーディネーターを設定します。

「Core Dataスタック:NSPersistentContainerの設定」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

Core Dataの概要

Core Dataは、Appleが提供するオブジェクトグラフおよび永続化フレームワークです。オブジェクト指向APIを使用して、SQLiteなどのストアを管理します。

import CoreData
// Key classes: NSPersistentContainer, NSManagedObjectContext
// NSManagedObject, NSFetchRequest

NSPersistentContainerの作成

.xcdatamodeldモデルの名前を指定してNSPersistentContainerを初期化し、永続ストアを読み込みます。

let container = NSPersistentContainer(name: "MyModel")
container.loadPersistentStores { desc, error in
  if let error { fatalError("Core Data failed: \(error)") }
}

Persistence Controllerパターン

コンテナをシングルトン(または依存性注入可能な)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はUIで使用するメインスレッドのコンテキストです。負荷の高い処理には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()
}

@FetchRequestによるSwiftUIとの統合

SwiftUIビューで@FetchRequestを使用すると、Core Dataの変更時にUIが自動的に更新されます。

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 }

確認問題

UI主導のCore Dataの読み書きには、どのNSPersistentContainerコンテキストを使用すべきですか?

レッスンのまとめ

NSPersistentContainerでCore Dataを設定してストアを読み込み、PersistenceControllerでラップします。メインスレッドではviewContextを、負荷の高い処理にはnewBackgroundContext()を使用します。@FetchRequestと管理対象オブジェクトコンテキストの環境キーを使ってSwiftUIと統合します。

よくある質問

「Core Dataスタック:NSPersistentContainerの設定」レッスンは無料ですか?

はい。「Core Dataスタック:NSPersistentContainerの設定」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「Core Dataスタック:NSPersistentContainerの設定」で何を学びますか?

SwiftUIアプリで永続コンテナ、コンテキスト、コーディネーターを設定します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「Core Dataスタック:NSPersistentContainerの設定」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Core Dataスタック:NSPersistentContainerの設定
  2. SwiftDataの@ModelとModelContext
  3. リレーションシップとFetch Descriptor
  4. 軽量マイグレーションとCloudKit同期
← Swift Academyに戻る