果てなき遠回り
Mac Developer Library
以前全く何にも読まずに「マッピングモデルだ!これでいちいちデータを作りなおなくていいぞ!わーい。。。。あれ?動かないよ?」
ってなってたんだが、ドキュメント発見して「わーい、これで完璧!。。。あれ?動かないぞ」ってなってました。
今回の敗因は、「分けも分からずデータモデルファイルを2分割してさらに新しい事をしようとした」って事でした。
今回、CoreData Applicationテンプレートから作ってapplication delegateの既存メソッドは弄っていない。
の場合は、
- データモデルを選択して「設計」「データモデル」「モデルバージョンを追加」
- 出来たファイルはターゲットに追加しない!元のデータモデルも追加しない!
- 新しいデータモデルを編集。
- 変更がある部分にバージョンハッシュを設定する。別に何でも良さげ。
- 新規作成でマッピングモデルを作成。パネルの内容を読めば大体分かる。
- マッピングモデルはターゲットに追加する。
- マッピングモデルを編集。一部については後述。
- Application DelegateのpersistentStoreCoordinatorメソッド、addPersistentStoreWithType:の当たりでNSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, nil];をoptionに設定。
- 新しいデータモデルを選択して、「設計」「データモデル」「現在のバージョンを設定」
これだけ。
基本的にはコードはほとんど書かない。
マッピングモデルの編集。
元のデータから生成可能な属性を追加した場合。
値式に呼ぶメソッドを指定。何やら変な書式ああるみたい。
FUNCTION(CAST("TransformClass", "Class"), "transformMethod:", $source.data)
こんな感じ。TransformClassのクラスメソッドtransformMethod:が引数$source.dataで呼ばれる。引数が複数ある場合はカンマ区切りでどんどん並べれば良いみたい。