【SwiftUI】Core Dataの使い方:準備編

SwiftUIでCore Dataを扱うための前提知識と、新規プロジェクトの作成方法について解説します。

スポンサーリンク

環境

この記事の情報は次のバージョンで動作確認しています。

【Xcode】12.3
【Swift】5.3.2
【iOS】14.3
【macOS】Big Sur バージョン 11.1
スポンサーリンク

Core Dataで使う主要クラス

Core Dataを使う上で、最低限下記クラスの役割は理解しておいた方が良いです。

NSPersistentContainer(永続化コンテナ)
Core Dataを扱うための機能が全部入ったクラスで、アプリの起動時に生成されます。

NSManagedObjectContext(被管理オブジェクトコンテキスト)
レコードの生成、保存、削除といったデータベース操作を行うクラスです。
Core Dataで検索や生成したオブジェクトは全てこのクラスの管理化に置かれます。
アプリ起動時に生成され、環境変数@Environment(\.managedObjectContext)に登録されます。

NSManagedObject(被管理オブジェクト)
データベースの1レコードに対応するクラスです。

スポンサーリンク

Core Data用プロジェクトの作成

Core Dataを使う為、新規プロジェクト作成のオプション設定は次のようにします。

Interface:SwiftUI
Life Cycle:SwiftUI App
Use Core Data:チェックを入れる

標準テンプレートの生成

これにより、Core Dataに必要なファイルおよびクラスの生成処理が追加されます。

スポンサーリンク

自動的に生成されるコードの解説

Core Data用プロジェクトを作成した際に自動で生成されるコードおよびファイルについて解説します。
逆にこれらを手動で設定すれば、後からCore Data用プロジェクトにもできます。

(プロジェクト名)App.swift

アプリの起動時に実行する内容が記述されているファイルです。
ここに、下記2つの処理が追加されています。

  1. NSPersistentContainerの初期化
  2. 環境変数@Environment(\.managedObjectContext)にNSManagedObjectContextを登録する処理

ContentView.swift

Core Data用のプロジェクトを生成すると、通常のHello Worldの代わりに、Core Dataの標準テンプレートコードが追加されます。標準テンプレートついては、【SwiftUI】Core Dataの使い方:標準テンプレートを読み解くで解説していますので、こちらを御覧ください。
基本的にばっさりと削除してOKです。

(プロジェクト名).xcdatamodeld(追加ファイル)

データベースのテーブル構造(データモデル)を定義するファイルです。
デフォルトで定義されている、Itemエンティティは不要なので削除します。

ModelEditor

Persistence.swift(追加ファイル)

NSPersistentContainerの初期化について記述されているファイルです。
コードの強調部分がpreview時の初期データを設定している部分ですで、一旦削除して自アプリ用に書き換えます。

尚、preview時に初期データ設定無しで、対象テーブルをFetchしようとするとアプリがcrashしますので注意して下さい。

スポンサーリンク

あわせて読みたい記事

【SwiftUI】Core Dataの使い方:標準テンプレートを読み解く
(2023/03/25 更新) SwiftUIでのCore Dataの使い方を、標準テンプレートを読み解きながら解説します。
【SwiftUI】Core Dataの使い方:エンティエィ(Entity)を定義する
(2021/04/26 更新) Xcodeでエンティティを定義する方法を解説します。
【SwiftUI】Core Dataの使い方:基本編
SwiftUIでCore Dataの基本的な使い方を簡単なTodoリストアプリを例に解説します。
【SwiftUI】Core Dataの使い方:検索編(1/3)
データベースを検索して、オブジェクトとして取得するfetch処理について解説します。 を先に見ておくことをおすすめします。
【SwiftUI】Core Dataの使い方:検索編(2/3)
検索条件を動的に変更する方法を解説します。 の続編です。
【SwiftUI】Core Dataの使い方:検索編(3/3)
前の2つの記事 では、SwiftUIの特徴であるデータバインディングの仕組みを使い、検索結果とViewを紐付ける方法を紹介しました。これにより、検索結果に応じてViewが自動で再描画されます。 しかし、検索結果を別の処理のインプットに使う場...
【SwiftUI】Core Dataの使い方:リレーションシップ編
リレーションシップを使ってエンティティ同士をリンクする方法を解説します。