カスタムクラスを作ってエンティティの属性へのアクセスを簡潔にする。カスタムクラスを作ってエンティティの属性へのアクセスを簡潔にする。本記事は、前回記事「Entityの設定」の続きである。⇒「前回記事」Class管理オブジェクトコンテキストが管理するデータはNSManagedObjectクラスのインスタンスとしてメモリ上に展開される。このNSManagedObjectクラスを継承したクラスをカスタムクラスとして設定することができる。カスタムクラスを使う大きな利点は属性値へのアクセスが簡潔に記述できることだ。forKey:"name")カスタムクラスを使うと、以下のコードのようにインスタンス変数のプロパティとして属性値にアクセスすることができる。記述がシンプルになるし、プロパティ名を間違ったらコンパイルエラーで教えてくれるので、こちらの方が安心してコーディングできる。testTextField.text実際にカスタムクラスを作ってみよう。以降の手順を開始する前のXcodeプロジェクトをGitHubに置いたので、試してみる人はご利用されたし。Dataで保存、読込みするものを実装しておいた。Subclass」とたどる。データモデルの一覧が表示されるので、「プロジェクト名」にチェックが入っていることを確認して「Next」ボタンを押す。データモデルに定義されているEntityの一覧が表示されるので、Playerにチェックが入っていることを確認して「Next」ボタンを押す。保存先を指定する画面が表示されるので、プロジェクトのフォルダが指定されていることを確認して「Create」ボタンを押す。すると、「Player.swift」と「Player+CoreDataProperties.swift」の2つのファイルが作られる。これがカスタムクラスのファイルである。Player.swiftは、NSManagedObjectクラスを継承したPlayerクラス。最初はプロパティやメソッドは何もない。Playerクラス固有の実装をここにコーディングしていく。subclass}Player+CoreDataProperties.swiftは、Playerクラスを拡張したクラス。⇒「拡張とは」ここにエンティティの属性がプロパティとして定義される。Playerエンティティの定義を変更して再度サブクラスを作ると、「Player+CoreDataProperties.swift」が更新され、「Player.swift」は更新されない。2つのファイルが存在する理由は、エンティティの定義を変更したあとのサブクラス再生成で開発者がコーディングした実装箇所が上書きされないためである。String?}下図赤枠の「プロジェクト名.xcdatamodeld」を選択、黄緑枠の「Player」を選択、紫枠のデータモデルインスペクタボタンを押して設定画面を表示し、Classの設定を確認すると、作成したカスタムクラス名が自動で設定されていることが分かる。親切に設定してくれてありがとう。ViewController.swiftを以下のコードに変更する。管理オブジェクトコンテキストから取得したオブジェクトをPlayerクラスにキャストし、nameプロパティに対して値を設定、取得するようにした。//管理オブジェクトコンテキストを取得する。//管理オブジェクトコンテキストからPlayerエンティティを取得する。//すべてのPlayerエンティティの名前をラベルに表示する。//デリゲート先に自分を設定する。//ラベルの値にテキストフィールドの値を追記する。//新しいPlayerエンティティを管理オブジェクトコンテキストに格納する。//Playerエンティティの名前にテキストフィールドの値を設定する。//管理オブジェクトコンテキストの中身を永続化する。{//管理オブジェクトコンテキストを取得する。applicationDelegate.managedObjectContext//管理オブジェクトコンテキストからPlayerエンティティを取得する。[Player]//すべてのPlayerエンティティの名前をラベルに表示する。data.name!}//デリゲート先に自分を設定する。{//ラベルの値にテキストフィールドの値を追記する。testTextField.text!//新しいPlayerエンティティを管理オブジェクトコンテキストに格納する。Player//Playerエンティティの名前にテキストフィールドの値を設定する。testTextField.text//管理オブジェクトコンテキストの中身を永続化する。true}}以下は実際のプレイ動画。属性へのアクセス方法を変えただけなので、動きは変更前と同じである。ModuleClassで指定したカスタムクラスが存在するモジュールを指定する。モジュールとは、プロジェクトをビルドしたものやフレームワークのことをいう。Module」に設定する。Classと同様に、カスタムクラスを作ったときにこの項目も自動で設定される。