【SwiftUI】カメラ撮影画像とライブラリー画像のCoreDataへの保存と読み込み

この記事では、SwiftUIでカメラで撮影した画像と、ライブラリー画像をCoreDataへ保存する方法と、CoreDataに保存されているバイナリデータを読み込んで画像として表示する方法を解説します。

 

過去の記事で紹介した、カメラ機能の実装方法と、CoreData の基本的な実装方法で紹介したコードをベースに解説していきます。

対象の記事は以下の2点です。

関連記事

この記事では、SwiftUIでのカメラ機能の実装方法について解説します。実装例として、カメラを起動して撮影した画像と、すでに撮影されておりライブラリーに保存されている画像の利用方法を紹介します。 ◆動作検証[…]

【SwiftUI】カメラ機能の実装方法【撮影画像とライブラリー画像の利用】
関連記事

この記事では、SwiftUIでのCoreData の基本的な実装方法【CRUD(作成、更新、削除)】を紹介しています。簡単なタスク管理App(タスク内容とスケジュールの登録)を作成しながら解説します。 ◆動[…]

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

 

◆動作検証環境

・ローカル環境:mac Catalina
・XCode:12.1
・SwiftUI:2.0
・iOS:14.0
・Life Cycle:SwiftUI App
アプリの概要は、ホーム画面でCoreDataに登録されているTodoのデータ(画像、日付、優先度、タイトル(内容))を表示します。
データを登録する画面では、上記の4項目を登録しますが、画像は画像のライブラリーから選択か、カメラを起動して撮影したものを選択し、CoreDataへ登録します。
スポンサードリンク

CameraViewの作成(表示画像の選択、撮影)

 

データの登録画面で、選択されている画像を確認するためのサムネイル画像の表示、ライブラリーからの画像選択、カメラ起動し撮影した画像を選択するCameraViewを作成します。

 

編集する際に、CoreDataに登録されている画像を表示するためと、データ登録時にViewModelクラスのメソッドを使用するために、UIImagePickerControllerで選択されたイメージのデータは、ViewModelの変数へ代入します。

 

以下のコードでは、loadImage メソッドを作成し、CameraView Struct内のonAppear メソッドで反映させています。

 

CameraView.swift

 

画像データをCoreDataへ保存する

 

表示する画像のデータをCoreDataで扱うために、BinaryData型のAttributeを追加します。

 

UIImagePickerControllerで画像の値をして利用するData型でCoreDataへ保存します。

ViewModel.swift

 

 

NewDataSheet.swift

 

CoreDataに登録されている画像データを表示する

 

CoreDataに登録されている画像データを、Viewに表示する際は、Data型→UIImage型、UIImage型→Image 型へ変換します。

ContentView.swift

 

登録処理を行うSheetでは、編集の更新を完了せずにSheetを閉じた場合に、ViewModelの変数を初期値に戻るために、viewModelValueReset メソッドを作成し、onDismiss 処理で実行します。

 


以上、SwiftUIでカメラで撮影した画像と、ライブラリー画像をCoreDataへ保存する方法と、CoreDataに保存されているバイナリデータを読み込んで画像として表示する方法を解説しました。