techium

このブログは何かに追われないと頑張れない人たちが週一更新をノルマに技術情報を発信するブログです。もし何か調査して欲しい内容がありましたら、@kobashinG or @muchiki0226 までいただけますと気が向いたら調査するかもしれません。

Core Data 入門

Core Data 入門

今時 Realm とかあるしもう触らなくて済むかと思っていた Core Data。
やんごとなき理由により触らなければならなくなること、あると思います。

設計思想

  • そもそも DB にする必要あるの?
  • モデルレイヤを適切に切出せている?

みたいなの、あると思います。
この辺り今回は触れないので、こういう検討は済んだ上で、いざ Core Data を使い始める、ところに焦点を絞る。

クラス分け

モデルオブジェクト

データ保持の最小単位として定義する。

ロジックを一切含まないようにし、情報保持に特化させる。
インデックスの付与や、内部の各種変数のアクセッサの提供など、ただただ情報を保持することに特化させる。

モデルマネージャ

モデルオブジェクトデータの読み書きを誰が行うか。読み出したデータを誰が保持するか。各コントローラで読み書きの処理を別々に実装する? 読み出したデータをお互いに渡し合う?
色々な問題があるため、モデルオブジェクトを一元管理するクラスを作成する。

シングルトンのデメリット? 今は忘れることにする。

実装

モデリングツール

Xcode の New File... -> iOS -> Core Data とたどって、Data Model を追加する。 f:id:kfurue:20160704014204p:plain

エンティティの追加

モデルオブジェクトはエンティティとして定義していく。

ほぼ GUI からの操作のみで完結する。

  • インデックスを定義する
    • 標準の objectID は Core Data の内部で使われるものであり、常に一意とは限らない
    • 一意に求められる ID をつけておくと何かと便利

f:id:kfurue:20160704021333p:plain

関連の追加

エンティティ間の関連を決定する。

1対1、1対多 など、適切なものを設定する。   逆関連についても、必要に応じて適切に設定する。

f:id:kfurue:20160704022633p:plain

まずはベースまで。