2016年6月30日木曜日

Core Data を使用する(2)

このシリーズの1回目、「Core Data を使用する(1)」では、3つのエンティティ(人物、社員、部署)を定義して、自動生成されたコード(Core Data スタック)について簡単に説明しました。今回は前回作成したプロジェクトを修正して、社員エンティティと部署エンティティの CRUD 機能(または、上位のビジネスロジック)を提供する社員サービスと、部署サービスを作成して、Core Data の使い方をもう少し掘り下げたいと思います。
開発/実行環境:Xcode8_beta, Swift3.0


部署サービスの作成

まず、プロジェクトナビゲータで ”_Service” グループを作成します。このグループ下に新規の BusyoService.swift ファイルを作成します。
_Service/BusyoService.swift:
  • 14-16:インスタンスの生成時に管理オブジェクトコンテキストを mc に設定。
  • 32-38:指定されたフィルタ条件のフェッチ要求を作成。
    • 33:部署エンティティに対するフェッチ要求を生成。
    • 34-36:検索条件が指定されたときのみ、生成したフェッチ要求に条件を設定する。
  • 21-24:登録された部署データを全件取得する。
    • 22:fetchRequest(pred:)関数により、フェッチ要求を生成する。
      引数を指定しないので、デフォルトの nil が渡される。
  • 41-46:指定された部署名の部署エンティティ・インスタンスを生成。
    • 42:部署エンティティの定義を取得する。
    • 43:取得した定義を元にインスタンスを生成する。
    • 44:プロパティに値を設定。
  • 49-51:指定した部署エンティティを削除する。


社員サービスの作成

同じようにして、SyainService.swift ファイルを作成します。
_Service/SyainService.swift:
CRUD 機能については、部署サービスと共通の部分が多いので、スーパークラスに共通部分をまとめることができます。このアプリではクラスの数も少ないので、そのままにしています。部署サービスと異なる部分(検索の部分)について以下で説明します。
  • 27-30:氏名検索:
    • 28-29: Predicate(format: "simei == %@", simei) の検索条件でフェッチ要求を作成して、氏名に対してフェッチを実行。
  • 32-35:氏名あいまい検索:
    検索条件を(format: "simei LIKE %@", simeiLike) のように指定。 simeiLike として "山田*" を指定すれば、氏名が山田で始まる社員を検索する。
  • 44-46:条件指定検索:
    引数として渡された検索条件で、社員を検索する。
  • 99-117: SyainMO の拡張:Swift の拡張を使って、SyainMO に計算プロパティを追加する。
    • 102-110: 勤続月数(KinzokuTuki)プロパティ:
      入社日(self.nyusyaBi)とシステム日付から勤続月数を求める。
      注意:本来はシステム日ではなく、退職予定日など指定した日付から求める。


AppDelegate.swift の修正

AppDelegate.swift ファイルの保存アクション(自動生成されたコード)を以下のように修正します
修正した AppDelegate.swift の saveAction(_:):
  • 4,5:部署サービス、社員サービスを生成。
  • 7,8:サービスの削除関数を使って、部署、社員の登録データを全件削除。
    注意:deleteAll()のような意味のわかる関数を作成すべきですね。
  • 10-11:部署データを2件作成。
  • 13-21:社員データを3件作成して、部署データとの関係を設定
  • 37-47:社員サービスの検索関数を使って、登録データを検索。
  • 50-60:検索結果をプリントするヘルパー関数。
    • 58: SyainService.swift の SyainMO の拡張で追加した、計算プロパティ(kinzokuNenGetu)を使って勤続年月をプリント。


アプリケーションのメニューの File/Save と保存アクションコードを結ぶ

上で修正した保存アクションの saveAction(_:)とメニューの File/Save を連結します。
ストーリーボードの Application シーンを開いて、AppDeleaget.swift/@IBAction 行の先頭の円からメニューの File/Save へドラッグします:



実行して結果を確認する

作成したアプリを実行して、メニューの File > Save を選択します。
コンソールに以下の内容が出力されます。

また、"/Users/bri_tcho/Library/Application%20Support/CoreDataDemo_Data/CoreDataDemo.storedata"ファイルは以下のようになります:
  • 8-33: saveAction(_:) の実行の結果として登録されたデータ(部署2件と社員3件)を確認できます。



0 件のコメント:

コメントを投稿