【Swift】Core Dataの使い方。エディタスタイル「Graph」でデータモデルを作る。(Swift 2.1、XCode 7.2)

2020年6月16日

Editor Styleの「Graph」とは

本記事ではEditor Style(以下、エディタスタイル)の「Graph」について説明する。

エディタスタイルとは、データモデルにエンティティやリレーションシップなどを追加するときの編集画面の様式のことである。「Table」と「Graph」の2種類があり、前回記事までは「Table」を使ってデータモデルを編集してきた。

下図はエディタスタイルが「Table」の編集画面。エンティティやリーションシップが1個1行で表示されている。

黄緑枠のエディタスタイルの右ボタンを押すとスタイルを「Graph(以下、グラフスタイル)」に変更できる。

Editor Styleが「Table」の編集画面

 

下図はグラフスタイルの編集画面。エンティティ1個が四角枠1個で表現され、エンティティとエンティティの間に引かれた線がリレーションシップを表現している。

グラフスタイルの方がエンティティ間のリレーションシップを把握しやすいので、エンティティの種類が増えてきたら必ず使いたいエディタスタイルである。

Editor Styleが「Graph」の編集画面

 

エディタスタイル「Graph」でエンティティを作る

実際に、グラフスタイルを使ってエンティティを定義してみよう。

下図のような生徒一覧と部一覧があり、生徒は1つの部に所属しているとする。これから、グラフスタイルを使って生徒エンティティと部活エンティティを作り、2つのエンティティにリレーションシップを追加する作業をする。

リレーションシップ

 

下図赤枠の「プロジェクト名.xcdatamodeld」を選択、黄緑枠の「Add Entity」ボタンを押してエンティティを1個追加する。

紫枠のデータモデルインスペクタボタンを押して設定画面を表示し、Nameに「Student」を入力する。

エンティティを追加する

 

下図赤枠のエディタスタイルボタンを押してグラフスタイルに変更する。すると、編集画面中央に四角枠が1個表示される。これは生徒エンティティを表している。

エディタスタイル「Graph」

 

下図赤枠の「Add Attribute」ボタンを押すと、黄緑枠の属性が追加される。紫枠のデータモデルインスペクタボタンを押して設定画面を表示しNameに「name」、Attribute Typeに「String」を設定する。

属性を追加する

 

下図黄緑枠の「Add Entity」ボタンを押すと、編集画面に別の四角枠が追加される。

先ほどと同じようにして、エンティティ名に「Club」を設定、Attributeに「clubName」を追加する。これで、生徒エンティティと部活エンティティができた。

Clubエンティティを追加

エディタスタイル「Graph」でリレーションシップを追加する

Ctrlキーを押しながらStudentエンティティをドラッグ&ドロップでClubエンティティまで運ぶ。すると、両方のエンティティのリレーションシップに「newRelationship」が追加される。

黄緑枠のリレーションシップをダブルクリック、紫枠のデータモデルインスペクタボタンを押して設定画面を表示し、Nameに「student」、Typeを「To Many」に設定する。

Studentエンティティのリレーションシップも同じようにして、Namに「club」を設定する(Typeは「To One」のまま)。これで生徒エンティティと部活エンティティに双方向のリレーションシップが追加された。

リレーションシップを追加する

 

リレーションシップの矢印線の見方

リレーションシップの線の両端には矢印がついている。矢印が1つだけ付いている場合は参照するオブジェクトが1つだけ存在することを意味している(To One)

一方、矢印が2つ重なっているものは参照するオブジェクトが複数存在することを意味している(To Many)

例えば下図をStudent視点で考えると、StudentはClubのオブジェクトを1つだけ知っているので、右向きの矢印は1個になる。

逆にClub視点で考えると、ClubはStudentオブジェクトを複数知っているので左向きの矢印が2個になる。

矢印は設定項目のType(To One または To Many)をもとに自動で表示されるので、矢印が想定したものになっていない場合はTypeの設定を確認すること。

リレーションシップ

 

下図赤枠のエディタスタイルの左ボタンを押してスタイルを「Table」に戻すと、「Graph」で構築したStudentエンティティとClubエンティティの属性とリレーションシップが定義されている。

Editor Styleを「Table」に変更する

 

エディタスタイルの「Graph」、見やすいなり。