4

次のようなコアデータモデルがあります

代替テキスト

attributesプロパティPageは のセットですDictionaryEntry。これらは Page オブジェクトの値であり、標準によく似ていますNSDictionary(すべてのkeysvaluesが文字列であることを除いて) 。

とを持つ がPageあります。その特定のページをロードするためのフェッチ要求を作成するにはどうすればよいですか?DictionaryEntrykey="title"value="Home"

4

2 に答える 2

7

サブクエリの述語構文を確認する必要があります。通常の ANY キーワードは使用できません。これは、同時に 2 つではなく 1 つの列のみを照合できるためです。

  NSString *keyValue = @"title";
  NSString *valueValue = @"home";

  NSFetchRequest *request = [[NSFetchRequest alloc] init];
  [request setEntity:[NSEntityDescription entityForName:@"Page" inManagedObjectContext:_context]];
  [request setPredicate:[NSPredicate predicateWithFormat:@"(SUBQUERY(attributes, $a, $a.key == %@ && $a.value == %@).@count != 0)", keyValue, valueValue]];

より単純な述語ANY attributes.key = "title" AND ANY attributes.value = "home"は、key='addr'/value='home' と key='title'/value='pete' などの 2 つの dict を持つページも返すため、機能しません。

于 2010-09-19T12:06:14.583 に答える
1

「タイトル」の DictionaryEntry への「キー」を知ることから始めると仮定します。

NSPredicate を作成するときに、既知の「キー」を使用して DictionaryEntry オブジェクトに NSFetchRequest を作成しないでください。

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"DictionaryEntry" inManagedObjectContext:_context]];
[request setPredicate:[NSPredicate predicateWithFormat:@"key == %@", keyValue]];

有効な DictionaryEntry オブジェクトを取得したら、CoreData で作成された「ページ」関係を使用して、有効なページを取得できます。

于 2010-09-18T16:25:06.480 に答える