【SwiftUI】CoreData の基本的な実装方法【CRUD(作成、更新、削除)】

この記事では、SwiftUIでのCoreData の基本的な実装方法【CRUD(作成、更新、削除)】を紹介しています。

簡単なタスク管理App(タスク内容とスケジュールの登録)を作成しながら解説します。

 

◆動作検証環境

・ローカル環境:mac Catalina
・XCode:12.1
・SwiftUI:2.0
・iOS:14.0
・Life Cycle:SwiftUI App
スポンサードリンク

SwiftUIでCoreDataを利用するプロジェクトの作成

 

まずは、プロジェクトの作成です。

Use Core Dataにチェックをいれて作成します。

 

Use Core Dataにチェックをいれて作成します。

 

SwiftUIでCoreDataを利用する際の初期コードの設定

 

プロジェクト作成の際にUse Core Dataにチェックを入れると、予めContextView.swiftPresistence.swift にCoreData操作に利用するコードが記載されています。

今回は、オリジナルの操作方法(VMMV)にするため対象となるコードを削除します。

削除後のコードを、一旦以下のようにします。

 

ContextView.swift

 

Presistence.swift

 

AppNameApp.swift もCore Data利用に対応するコードとなります。

こちらのファイルはデフォルトのまま利用します。

 

 

次に.xcdatamodeldファイルを編集します。

Entity名をTaskとし、Attributeにdate(Date型)、content(String型)を追加しました。

Entity名をTaskとし、Attributeにdate(Date型)、content(String型)を追加しました。

編集後は、変更をプロジェクトに反映させるためにビルドします(commandB )。

 

SwiftUIでCoreDataを利用する際のデータの登録、編集

 

CoreDataへデータを登録するコードを紹介します。

今回は、以下のようなSheetを作成して、タスクの内容とスケジュールを入力し登録、編集を行います。

今回は、以下のようなSheetを作成して、タスクの内容とスケジュールを入力し登録、編集を行います。

 

ViewModel.swift

 

ポイント

11行目:データ登録、編集時のメソッド

新規登録として呼ばれた場合は、If文より下のコードが利用されCoreDataへデータが書き込まれる。

データ書き込み後は、Sheetを隠し、次回の登録に向けタスク内容と、スケジュール内容を初期化する

 

編集(更新)として呼ばれば場合は、If文内のコードが利用され、編集後のデータが書き込まれる。

データ書き込み後は、新規登録同様に関係データを初期化する。

 

40行目:

データ編集用のメソッド

すでに登録されているデータを編集するために利用する。

元となるデータを予め表示する形で、登録用のSheetを表示する。

書き込みは、上記で紹介した登録用のメソッドを利用する。

 

NewDataSheet.swift

 

ポイント

 

5,6行目:

ViewModelのデータ利用のため、@ObservedObjectの変数定義。

managedObjectContextデータ利用のための、@Environmentの変数定義

 

11、33行目:

Sheetを表示する際に、編集用のデータがあるかないかで、Sheetのタイトル、書き込み用のボタンのラベル名を変更する。

 

18、29行目:

CoreDataへ登録する、タスク内容とスケジュールを入力する。

 

48,49行目:

タスク内容が無い状態で書き込まれるのを防ぐための対応。

 

SwiftUIでCoreDataを利用する際のデータの表示、削除

 

CoreDataに登録されているデータを表示、削除するコードを紹介します。

今回は、以下のようなViewを作成して、タスクの内容とスケジュールの表示、削除を行います。

 

ContentView.swift

 

ポイント

8行目:@FetchRequest変数の利用

CoreDataに登録されているデータを取得する。

sortDescriptors: [NSSortDescriptor(key: "date", ascending: true)] と指定する事で、日付のデータを元に昇順で表示します。

 

25行目:

CoreDataのデータが無い場合の表示

 

46行目:

.contextMenu{} として更新、削除を行う。

編集の場合は、ViewModelクラスの編集用のメソッドを呼ぶ

 

65行目:

新規データ登録としてSheetを表示し、登録を行う。

 

 


以上、SwiftUIでのCoreData の基本的な実装方法【CRUD(作成、更新、削除)】を紹介しました。