2011年8月17日水曜日

Xcode4 の Model Editor

Xcode には CoreData で操作するモデル作成する GUI エディタがある。こんなやつ。
画像の左に "Fetch Requests" という項目があるが、これは名前が示す通り NSFetchRequest を定義しておけるものだ。ソースコードに書くといろいろややこしく、見づらくなってしまうけど、モデルデータに格納しておけば比較的すっきりと書くことができる。
NSURL *modelURL = [NSURL URLWithString:path];
NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
// モデルデータにある Fetch Request の一覧を取得
NSDictionary *requests = [managedObjectModel fetchRequestTemplatesByName];
// 名前を元に特定の Fetch Request を取得
NSFetchRequest *request = [managedObjectModel fetchRequestTemplateForName:@"MyFetchRequest"];
さて、この Fetch Request であるが、"year == 2011" などの定数を元に作成してもあまり恩恵はない。やはり変数を扱える方が嬉しい。Xcode3 までは Editor のポップアップに VARIABLE という項目があり、簡単に利用する事ができた。Xcode4 からはこの選択項目がなくなり、自分で記入しなければいけないので注意が必要。NSPredicate を使った事がある人なら分かると思うが、変数を扱うには $ 記号を使って変数名を指定してあげれば良い。この時、expression を選択しておくのがポイントだ。
このようにして作成した Fetch Request のテンプレートは fetchRequestTemplateForName: ではなく fetchRequestFromTemplateWithName:substitutionVariables: を使って呼び出す。
NSDictionary *variables = [NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:2010] forKey:@"YEAR"];
NSFetchRequest *request = [managedObjectModel fetchRequestFromTemplateWithName:@"QuestionsWithYear" substitutionVariables:variables];

0 件のコメント:

コメントを投稿