【Swift】Core Dataの使い方。複数の管理オブジェクトコンテキストを使う。(Swift 2.1、XCode 7.2)

2020年6月16日

複数の管理オブジェクトコンテキストとは

前回記事までは、1つの管理オブジェクトコンテキストを使用してデータを保存した。

Core Dataの保存の流れ

 

外部ファイルに保存するタイミングがすべてのオブジェクトで同じで良ければいいが、あるエンティティは即時保存し、その他のエンティティは登録ボタンを押した段階で保存するなどエンティティごとに保存するタイミングを分けたいことがある。

そんなときは管理オブジェクトを2つ作り、管理オブジェクトコンテキストごとに保存するタイミングを変える。

複数の管理オブジェクトコンテキストを作るイメージ

 

複数の管理オブジェクトコンテキストを利用してみる

実際に、複数の管理オブジェクトコンテキストを利用してみよう。

以降の手順を行う前のXcodeプロジェクトをGitHubに置いたので、試してみる人はご利用されたし。
⇒「テスト用プロジェクト

部活動と生徒を登録する画面があり、キーボードのReturnキーを押すと管理オブジェクトコンテキストにデータが追加される。その後、保存ボタンを押すと外部ファイルにデータが保存される。

部活動と生徒のオブジェクトは同じ管理オブジェクトコンテキストに追加しているので、保存ボタンを押すと両方が保存される。これから、部活動用と生徒用の管理オブジェクトコンテキストを分けて、保存ボタンを押した側の管理オブジェクトコンテキストのみ保存されるように変更する。

以下は変更前のプレイ動画

AppDelegate.swiftを以下のコードに変更する。

変更箇所は2つ目の管理オブジェクトコンテキストを作ったのと、アプリ終了時に保存されていないデータはそのまま保存しないようにした(青色箇所)。

 

ViewController.swiftを以下のコードに変更する。

生徒のデータは生徒用の管理オブジェクトコンテキストに追加するようにした。

 

以下は実際のプレイ動画。部活動側の保存ボタンを押した場合は、部活動のデータのみ保存されるようになった。

 

逆に、生徒側の保存ボタンを押した場合は生徒のデータのみ保存される。