外部ファイルに保存されない一時的な属性を定義する。外部ファイルに保存されない一時的な属性を定義する。Dataのエンティティに定義されているAttribute(以下、属性)の設定について説明する。以降の検証を行う前のXcodeプロジェクトをGitHubに置いたので、試してみる人はご利用されたし。Dataを使って外部ファイルにデータが保存されるものを実装しておいた。属性の設定画面を開くには、下図赤枠の「プロジェクト名.xcdatamodeld」を選択、黄緑枠のエンティティを選択、黄枠の属性を選択、紫枠のデータモデルインスペクタボタンを押す。Transientチェックを入れると、外部ファイルに保存されない一時的な属性になる。下図赤枠の「+」ボタンを押して属性を追加する。黄緑枠のデータモデルインスペクタボタンを押して設定画面を表示し、Nameに「Test」を入力、Transientにチェックを入れる。Subclass」とたどる。データモデルの一覧が表示されるので、「プロジェクト名」にチェックが入っていることを確認して「Next」ボタンを押す。データモデルに定義されているEntityの一覧が表示されるので、Playerにチェックを入れて「Next」ボタンを押す。保存先を指定する画面が表示されるので、プロジェクトのフォルダが指定されていることを確認して「Create」ボタンを押す。すると、Player+CoreDataProperties.swiftのPlayerクラスにtestプロパティが追加される。通常の属性と一時的な属性の宣言は同じである。NSNumber?}ViewController.swiftを以下のコードに変更する(青色網掛けが変更箇所)。管理オブジェクトコンテキストに新しいオブジェクトを追加するときにtestプロパティに777を設定したのと、ラベルにtestプロパティの値も表示するようにした。//管理オブジェクトコンテキストを取得する。//保存データを表示する。//デリゲート先に自分を設定する。//Playエンティティで保存されているデータを取得する。//取得したデータをラベルに表示する。//nameの値が同じオブジェクトを検索する。//検索にヒットしなかった場合は新しいオブジェクトを管理オブジェクトコンテキストに格納する。//検索にヒットした場合は、そのオブジェクトを更新する。//管理オブジェクトコンテキストに格納したデータを保存する。//データを表示する。{super.viewDidLoad()//管理オブジェクトコンテキストを取得する。NSMergeByPropertyObjectTrumpMergePolicy//保存データを表示する。displayData()//デリゲート先に自分を設定する。{//Playエンティティで保存されているデータを取得する。[Player]//取得したデータをラベルに表示する。{//nameの値が同じオブジェクトを検索する。{//検索にヒットしなかった場合は新しいオブジェクトを管理オブジェクトコンテキストに格納する。{//検索にヒットした場合は、そのオブジェクトを更新する。{print("想定外")}//管理オブジェクトコンテキストに格納したデータを保存する。managedContext.save()//データを表示する。{print(error)}}}以下は実際のプレイ動画。777に設定したtestプロパティの値が保存されずに0になることが分かる。testプロパティの値が消えるイメージを下図で説明する。管理オブジェクトコンテキストに「name=太郎、age=20歳、test=777」のオブジェクトを追加する。この段階ではtestプロパティは777のままである。次に、管理オブジェクトコンテキストのsaveメソッドを呼び出すと、オブジェクトが外部ファイルに保存されるが、testプロパティは一時的な属性のため値は保存されずにname、ageの値が保存される。保存したオブジェクトは管理オブジェクトコンテキストの管理対象から外れて消滅する。そのため、同じオブジェクトを読み込むときは外部ファイルから読み込まれてtestプロパティは初期値になっている。saveメソッドの処理が終わった直後にオブジェクトが消滅するのではなく、saveメソッドを含むプロセスが終了した段階に消滅するような検証結果になっている。プレイ動画でも最初は777が表示されたのもそのためと考えられる。これについては明確になり次第追記する。saveメソッドを呼び出さなかったらtestプロパティの値はずっと777のままなのかを確認しておこう。ViewController.swiftの以下のコードをコメントアウトしてシミュレーターを起動する。Swift//管理オブジェクトコンテキストに格納したデータを保存する。managedContext.save()123//管理オブジェクトコンテキストに格納したデータを保存する。managedContext.save()以下は実際のプレイ動画。testプロパティの値はずっと777になった。アプリを終了するときに自動でsaveメソッドが呼び出されるようになっているので、アプリを再起動するとtestプロパティが初期値0のデータが表示される(AppDelegate.swiftを参照)。エンティティを継承させて属性のメンテナンスをしやすくする。フェッチの件数制限、並び替え、開始位置を指定する。エンティティに複合インデックスや一意制約を付与する。本記事は、前回記事「Entityの設定」の続きである。エンティティの属性の型、範囲、初期値を設定する。Propertyの条件式の書き方。コメントをキャンセルメールアドレスが公開されることはありません。