データエンティティを作る(CoreData 手習い#2)

CoreData

CoreData 手習いその2です。

扱いたいデータを決める

どんなデータを扱いたいかを事前に決めておいてください。というか、扱うべきデータはたいていすでに決まっているはずなので、それに合わせて「箱」を考えます。

ここでは、

  • ID(String)
  • 名前(String)
  • 年齢(Integer64)
  • 身長(Float)
  • 出欠(Boolean)
  • 出勤時間(Date)

を考えます。脈絡があまりないデータですが、なんとなくデータ型を網羅しようとしたらこうなりました。

あたらしいEntityを作る

Add Entityをクリックすると新しくエンティティが生成されます。

名前はWorkerEntityとでもしておきましょう。

エンティティが追加されました!

プロパティを入れていく

Attributesの+マークで追加していきます。

設定するのは名前とデータ型です。これ以外に右端のパネルで色々と設定できます。

プロパティをポチポチ (エンティティ名を設定してなかったので、そっと修正)

英語は自信が無いです。出欠とか、いざ英語にするとなるとどうしたらいいんでしょうね?

名前は小文字で入れます。”ID”などと大文字で入れると、「小文字にしてくれたまえ」と言われます。
それと個人的な好みですが、私はOptionalのチェックを消しています。

コンパイルで自動的にエンティティクラスを生成させる

作成したエンティティをクリックし右端のパネルにてCodegenを見てみます。これをClass Definitionにしておきましょう。

右ペインの真ん中あたりにいます

そういえば、Codegenに3つ選択肢がありますね

詳しいことはApple Developer Documentationのサイトを参照のこと。

Generating code | Apple Developer Documentation
Automatically or manually generate managed object subclasses from entities.

Class Definitionとは何か?

Class Definitionを選ぶことでXCodeがNSManagedObjectを裏で生成してくれます。昔はNSManagedObjectを自分で作らないといけなかったんですね……
ラクをさせて頂いています。

裏で生成されているため、コーディング時に何か手を加えることは想定されていないようです。実際、左ペインのファイル一覧のどこにも出てきません。完全にXCodeにお任せということですね。

なお、対応付けられているエンティティが変更されると、自動的に更新生成してくれます。ほんとお世話になります。

Manual/Noneとは何か?

XCodeにNSManagedObjectの生成をお任せせず、全部自分で作ります。
NSManagedObjectのロジックやプロパティに手を加える必要があるときにこちらを選びます。

業務ドメインに応じてロジックをまとめておきたいとか、アクセス修飾子を調整したいとかのときに需要がありそうです。

もっと詳しいことはApple Developer Documentationのサイトへ。

Generating code | Apple Developer Documentation
Automatically or manually generate managed object subclasses from entities.

Category/Extensionとは何か?

Category/Extensionとだけ書かれるとピンときませんが、Class DefinitionManual/Noneの中間のようなイメージです。NSManagedObjectのロジックに手を加える前提だけれども、フェッチリクエストを返すメソッドとプロパティの宣言だけはextensionで生成しておいてほしいケースで使われます。

結局どれを使うのん?

全部おまかせのClass Definitionが最もラクなので、これを選択するパターンが多いと思います。また、ロジックに手を加えたい場合はCategory/Extensionを使う場合が多そうです。

せっかくポチポチっとデータモデルを作ったのに、改めまして全部コードを書いていくのも手間ですよね。グラフィカルに作ったデータモデルをそのまんまXCodeに投げて、コード自動生成してもらうほうが正確ですしおすし🍣。

今回触らなかったところをさっと目通し

Relationship

エンティティ間の関係を設定するもののようです。イメージとしてはER図。

Configuring Relationships | Apple Developer Documentation
Specify how entities relate and how change propagates between them.

Fetched Property

これは解りにくい!ちょっと特殊なAttributeですね。

エンティティAとエンティティBを用意し、AのAttribute甲を用いてBから情報を取得します。これをエンティティAのAttribute(的なもの)として保持するときに使われるものが、このFetched Property。

なんとなくわかったような気がしますが、これはこれで改めて深掘りしてみたいと思います。

Core Data Programming Guide: Creating Managed Object Relationships
Explains how to manage objects using the Core Data framework.

本日はここまで

次回はいよいよデータの取り出しや保存を試してみます。それと、疑問点や保留した項目もまとめておきます。

次を書きました