part1,2はそれぞれ以下よりどうぞ。今回はRelationshipをつけていきます。RelationshipとはRelationshipとは、Entity間で関係を持たせることです。Database)」の類ですし、それぞれのEntityに関係を持たせることができます。「関係データベース」ってなんだ?って人はまずはそこから勉強すると良いと思います。エラそうに言っていますが、私もFE(資格)の勉強をする時にやっただけで、実際に触ってみるのは初めてです!少しだけ説明しておこうと思います。関係データベースとは関係データベースは、データを行と列による2次元の表で表し、複数の表を組み合わせてデータを管理します。こんな感じのやつです関係データベースには「主キー」と「外部キー」があります。主キーは「行を一意に識別するための列」のことをいいます。「データの値が空でなく、なおかつ決して重複しない列」のことです。この主キーがあることによって確実にデータを識別することができます。外部キーは「他の表の主キーを参照する列」です。別の表の主キーとなっているデータが格納されています。CoreDataを使用するときも同様に、1つのEntityに必ず1つ主キーにあたるものを作成してください。外部キーはRelationshipを指定するときに必要です。正規化とは正しくデータが管理できるような表を作ることを正規化といいます。関係データベースでは、表をいくつも組み合わせてデータを管理しています。それぞれの表の主キーや外部キーが変更された際には、他の表にも反映しなくてはなりません。しなければ、データに矛盾や重複が発生しています。正規化することで、データの矛盾や重複を取り除くことができます。正規化をすすめると、上のようにいくつもの表に分けることになるので、毎回表の結合をする必要が出てくるので、アクセス効率はむしろ低下してしまいます。厳密にいうと上記表の上側の表も正規化された表になります(第2正規形)。下の表も、担任→教室の部分が別表に分けられると思いますので、第2正規形なのかな・・・。ちなみに正規化されていない表というのは下のようなものになります。下は第1正規形となります。正規化は1.繰り返し項目がある(非正規形)2.繰り返し項目を取り除く(第1正規形)3.主キーによって他の項目が決まるように分別(第2正規形)4.主キー以外の項目によっても決定される項目を分別(第3正規形)といった流れになります。CoreDataで複数の表をつくろう長くなりましたが、やっとCoreDataの方をやっていきます。CoreDataで上記の「学生表」と「担任表」を作っていこうと思います。Entityを作成していきます。Entityより2つのEntityを作成します。このEntityの名前は表のタイトル(学生表/担任表)だと思うとわかりやすいかなと思います。StudentとClassにそれぞれAttributeを付け加えていきます。クラス」の部分になります。RelationshipをつけようStudentとClassにRelationshipをつけていきます。Student側Class側Student側に付け足した「studentClass」は先ほど説明した外部キーになります。私は「AttributeがstudentClassでTypeがClass」といった覚え方をしています。分かりづらいですが、このstudentClassもその他のnameとかと同じように扱うといった認識をしています。Class側は「Student表にあるstudentClassから参照されているよ」といった関係がつけられています。́;ω;`)1対1、1対多の関係CoreDataのRelationshipといったらこの「1対1の関係」「1対多の関係」「多対多の関係」といった言葉をよく聞きますよね。これはつまりこういうことだと思っています。「相田あい」の担任は「坂井聡」です。そのほかに担任はいません。反対に「坂井聡」の担任するクラスの学生は「相田あい」以外にもたくさんいます。これをCoreDataで関係をつけていきます。Manyを選択これでDataModelの設定は完了です。Subclassよりサブクラスを作成しておいてください。データを保存しようデータを保存していきます。}かるく説明をしていきます。最初に、Classの方にデータをいれておきます。"坂井聡"次にStudentを登録していきます。fetchData[0]}*/すでにあるクラスに登録する場合は最初のクラスの登録はしなくていいです。classNameだけでおkです。上記だと、まだデータの保存ができていないのでfetchDataは必ず空になっているのではと思います。(2017/03/15日追記)データを呼び出そうデータを呼び出すときはRelationshipをつけていないときとほとんど同じです。}}通常のAttributeとそんなに変わらず使えます。}この場合fetchData[i].student?.nameといった書き方はできません。クラスの人数を調べる場合は簡単にできますが、クラス側からの場合は、student個人の変更はできません。(できるかもですが面倒そう・・・)—-(2017/09/08追記)—–クラス側からstudentの情報を取り出すときは取得したfetchData[i]の情報を使えば取得できます。上記のfor文の中は[Class]の中身を1つずつ取り出しているのでfetchData[i]はClassの情報が入っています。}と、Studentを探して来てやればおkです。このときClassに紐づいているStudentを全て取得する場合(この場合だと坂井聡さんが担当しているクラスの生徒)、predicateのフォーマットの部分でfetchData[i]を用います。この”studentClass”というキーは、モデルを作ったときに設定した外部キーってやつです。ファイルを見た方がわかりやすいかもしれない。studentClass:Class?ってなってるやつですね。in文で配列の中身を1つずつ取り出す方法も知らなかったっぽいですね。あとはひっそり読み込みの方の保存方法がおかしかったのを修正しました。}このときClass側からの参照も削除されているはずです。}この場合1Aというクラスは削除されますが、1Aに所属しているStudentは削除されません。CoreDataについてはとりあえずこのパートで終わる予定です。何かあったら個別に書いていこうと思います。長くなってしまいましたがなんだかそんなにうまく説明できた気もしないです。参考CoreDataについては、「はじはじアプリ製作体験記」さんの記事が個人的にはすごくわかりやすくて大変参考になりました。ありがとうございます。細かい設定などに関しても詳しく書かれていますのでぜひぜひ。編集データを外部ファイルに保存する。これを使えば大量データも怖くない。2018/04/14追記Swift4で動作チェック済みです。気になったところですが、本記事のsaveData()を繰り返して呼び出すと、1Aのクラスが何個も作られることになります。}こんな感じで一度クラスのデータを読み込む必要があります。なっているところ、別にお互いのstudentClassという名前にまったく関係性ないですね。すんごいわかりづらい名前つけちゃってますが。"1A"としたら繋がりがあるわけではありません。Class型のオブジェクトを参照することになります。いうかもうClassっていう名前をつけたのも問題というか・・・せめてClassRoomって型名にするべきでした。してもわかりづらくて耐えられなくなったら全部置き換えするかもしれませんが、今はこの追記だけで失礼します。3】NSPredicateでDateを扱うとき【CoreData】Comments...コメントは認証制です。詳しくは下記の注意をお読みください。「Twitter」「Facebook」「Google+」「WordPress」のいずれかのアカウントをお持ちの方は各アカウントと連携することでコメントできます。コメントしたことはSNSに流れませんので、アカウントをお持ちの方はこちらの方法でコメントを投稿して下さると嬉しいです。アカウントをお持ちでない方はメールアドレスで投稿することができます。初回コメント時は承認後に表示されます。Related...2015/12/03【Swift】UIButtonを一回転させるアニメーション2019/4/15【UIRefreshControl】beginRefreshingを呼び出した時にtintColorが変わらなかった話。2018/2/02【Swift4】UINavigationControllerのNavigationBarをカスタマイズしてみた。3】関数内で非同期処理を行った後の値を返り値としたかった話【クロージャ】2018/9/05【Swift】UITableViewで下に引っ張ると拡大するヘッダーを実装してみた。設置しているのに、30px程度上にずれてしまうとき。すると直るかもしれない。ScrollView上のコンテンツとNavigationBarの重なっているところが透過していたら多分これで直せるはず。用いたテストでだけこの対応が必要なのよくわからないけれど。アニメーションがnoneなわけじゃなく、デフォルトの設定を使うよという意味らしい。animations.なのでアニメーションしちゃう。2020/1/15記事を書くほどでもないけれどメモっておきたいことテスト投稿。3】CoreDataをつかってみた。【Swift4】UINavigationControllerのNavigationBarをカスタマイズしてみた。―シンプルでインクルーシブなフォーム制作実践ガイド」を一読しました。何かあったら気軽にコメントよろしくね。古い記事は追記があるかも。