CoreData 手習いその2です。
扱いたいデータを決める
どんなデータを扱いたいかを事前に決めておいてください。というか、扱うべきデータはたいていすでに決まっているはずなので、それに合わせて「箱」を考えます。
ここでは、
- ID(String)
- 名前(String)
- 年齢(Integer64)
- 身長(Float)
- 出欠(Boolean)
- 出勤時間(Date)
を考えます。脈絡があまりないデータですが、なんとなくデータ型を網羅しようとしたらこうなりました。
あたらしいEntityを作る
Add Entityをクリックすると新しくエンティティが生成されます。
名前はWorkerEntityとでもしておきましょう。
プロパティを入れていく
Attributesの+マークで追加していきます。
設定するのは名前とデータ型です。これ以外に右端のパネルで色々と設定できます。
英語は自信が無いです。出欠とか、いざ英語にするとなるとどうしたらいいんでしょうね?
名前は小文字で入れます。”ID”などと大文字で入れると、「小文字にしてくれたまえ」と言われます。
それと個人的な好みですが、私はOptionalのチェックを消しています。
コンパイルで自動的にエンティティクラスを生成させる
作成したエンティティをクリックし右端のパネルにてCodegenを見てみます。これをClass Definition
にしておきましょう。
そういえば、Codegenに3つ選択肢がありますね
詳しいことはApple Developer Documentationのサイトを参照のこと。
Class Definitionとは何か?
Class Definition
を選ぶことでXCodeがNSManagedObject
を裏で生成してくれます。昔はNSManagedObject
を自分で作らないといけなかったんですね……
ラクをさせて頂いています。
裏で生成されているため、コーディング時に何か手を加えることは想定されていないようです。実際、左ペインのファイル一覧のどこにも出てきません。完全にXCodeにお任せということですね。
なお、対応付けられているエンティティが変更されると、自動的に更新生成してくれます。ほんとお世話になります。
Manual/Noneとは何か?
XCodeにNSManagedObject
の生成をお任せせず、全部自分で作ります。NSManagedObject
のロジックやプロパティに手を加える必要があるときにこちらを選びます。
業務ドメインに応じてロジックをまとめておきたいとか、アクセス修飾子を調整したいとかのときに需要がありそうです。
もっと詳しいことはApple Developer Documentationのサイトへ。
Category/Extensionとは何か?
Category/Extension
とだけ書かれるとピンときませんが、Class Definition
とManual/None
の中間のようなイメージです。NSManagedObject
のロジックに手を加える前提だけれども、フェッチリクエストを返すメソッドとプロパティの宣言だけはextension
で生成しておいてほしいケースで使われます。
結局どれを使うのん?
全部おまかせのClass Definition
が最もラクなので、これを選択するパターンが多いと思います。また、ロジックに手を加えたい場合はCategory/Extension
を使う場合が多そうです。
せっかくポチポチっとデータモデルを作ったのに、改めまして全部コードを書いていくのも手間ですよね。グラフィカルに作ったデータモデルをそのまんまXCodeに投げて、コード自動生成してもらうほうが正確ですしおすし🍣。
今回触らなかったところをさっと目通し
Relationship
エンティティ間の関係を設定するもののようです。イメージとしてはER図。
Fetched Property
これは解りにくい!ちょっと特殊なAttributeですね。
エンティティAとエンティティBを用意し、AのAttribute甲を用いてBから情報を取得します。これをエンティティAのAttribute(的なもの)として保持するときに使われるものが、このFetched Property。
なんとなくわかったような気がしますが、これはこれで改めて深掘りしてみたいと思います。
本日はここまで
次回はいよいよデータの取り出しや保存を試してみます。それと、疑問点や保留した項目もまとめておきます。
次を書きました