0

ここに画像の説明を入力

特にイベントに属するレシピから、レシピに関連するすべての食材を返すにはどうすればよいですか? そして、通路で注文しますか?

さらなる説明:

ユーザーは、Ingredients と関係のある Recipe オブジェクトの「レシピ本」を持っています。ユーザーは、レシピの準備を計画するときに、レシピをイベントに関連付けます。私が引き出そうとしているデータは、レシピに属し、イベントに属し、通路順に並べられた材料のリストです。基本的に「食料品リスト」。

Event オブジェクトとは何かについての詳細説明: イベントはレシピの複製を許可します。目玉焼き (材料 = "新鮮な卵 1 個") を 3 日間連続して (3 つの個別のイベント) 食べるとします。買い物リストに "1 個の新鮮な卵" を 3 回 (イベントごとに 1 つのインスタンス) 含める必要があります。

これが私のフェッチリクエストです。結果は返されません-問題の核心は述語であると思います:

NSFetchRequest *request = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Ingredient"    inManagedObjectContext:[self managedObjectContext]];
[request setEntity:entity];

// get ingredients of recipes that belong to events
[request setPredicate:[NSPredicate predicateWithFormat:@"Ingredient.recipe == Event.recipe"]];

// sort by "aisle"
NSSortDescriptor *sortDescriptorCategory = [NSSortDescriptor sortDescriptorWithKey:@"aisle" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObjects:sortDescriptorCategory, nil];

// create nsfrc with "aisle" as sectionNameKeyPath
NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"aisle" cacheName:@"MyFRCCache"];
frc.delegate = self;
NSError *error = nil;
if (![frc performFetch:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}
self.fetchedResultsController = frc;

Martin R さんの質問のおかげで、問題がさらに具体化しました。サンプル データと目的の出力を次に示します。

レシピ

Z_PK = 1、ZTITLE = "オートミール"
Z_PK = 2、ZTITLE = "ピーナッツ バターとゼリーのサンドイッチ"
Z_PK = 3、ZTITLE = "グリルド チーズ サンドイッチ"
Z_PK = 4、ZTITLE = "ビーフ シチュー"
Z_PK = 5、ZTITLE = "ハンバーガー」
...さらに、フェッチ結果に含まれないレシピがさらに...

イベント

Z_PK = 1、ZTITLE = "朝食 1"、ZRECIPE = 1
Z_PK = 2、ZTITLE = "昼食 1"、ZRECIPE = 2
Z_PK = 3、ZTITLE = "夕食"、ZRECIPE = 4
Z_PK = 4、ZTITLE = "朝食 2 ", ZRECIPE = 1 // レシピの繰り返しに注意
Z_PK = 5, ZTITLE = "ランチ 2", ZRECIPE = 3
Z_PK = 6, ZTITLE = "ディナー 2", ZRECIPE = 5

成分

Z_PK = 1、ZTITLE = "オートミール 1 カップ"、ZRECIPE = 1、ZAISLE = 4
Z_PK = 2、ZTITLE = "牛乳 2 カップ"、ZRECIPE = 1、ZAISLE = 2
Z_PK = 3、ZTITLE = "白パン 2 枚" , ZRECIPE = 2, ZAISLE = 5
Z_PK = 4, ZTITLE = "ゼリー大さじ1", ZRECIPE = 2, ZAISLE = 4
Z_PK = 5, ZTITLE = "ピーナッツバター大さじ1", ZRECIPE = 2, ZAISLE = 4
Z_PK = 6、ZTITLE = "ライ麦パン 2 個"、ZRECIPE = 3、ZAISLE = 5
Z_PK = 7、ZTITLE = "チーズ スライス 1 個"、ZRECIPE = 3、ZAISLE = 2
Z_PK = 8、ZTITLE = "1 ポンドのロースト ロースト" , ZRECIPE = 4, ZAISLE = 3
Z_PK = 9, ZTITLE = "にんじん2本", ZRECIPE = 4, ZAISLE = 1
Z_PK = 10, ZTITLE = "ジャガイモ2個", ZRECIPE = 4, ZAISLE = 1
Z_PK = 11,ZTITLE = "ハンバーガー バンズ 1 個"、ZRECIPE = 5、ZAISLE = 5
Z_PK = 12、ZTITLE = "1/4 ポンド ハンバーガー"、ZRECIPE = 5、ZAISLE = 3

通路

Z_PK = 1、ZTITLE = "農産物"、ZDISPLAYORDER = 1
Z_PK = 2、ZTITLE = "乳製品"、ZDISPLAYORDER = 2
Z_PK = 3、ZTITLE = "肉"、ZDISPLAYORDER = 3
Z_PK = 4、ZTITLE = "乾物と缶詰"、ZDISPLAYORDER = 4
Z_PK = 5、ZTITLE = "ベーカリー"、ZDISPLAYORDER = 5

必要な出力 (通路 ZDISPLAYORDER で並べ替え、太字の項目はセクション タイトル)

生産
-2 人参
-2 じゃがいも
乳製品
-2 カップの牛乳
-2 カップの牛乳 // レシピのインスタンスが 2 つあるため、2 番目のアイテム-1 チーズ
スライス チャック ロースト -1/4 ポンド ハンバーガー乾物と缶詰のアイテム -オートミール 1 カップ -オートミール 1 カップ // レシピのインスタンスが 2 つあるため、2 番目のアイテム -大さじ 1。ゼリー - ピーナッツバター大さじ1ベーカリー - 食パン 2切れ - ライ麦パン2切れ - ハンバーガー用バンズ1 個











4

2 に答える 2

0

フェッチ要求は、(私が知る限り)同じ管理対象オブジェクトの重複エントリを返すことはできません。だから私が持っている最も近い解決策は次のとおりです。

すべての材料を取り出し、に従ってセクションに入れますaisle.displayOrder。各セクション内で、材料をそれぞれの表示順序で並べ替えます。

NSSortDescriptor *sort1 = [NSSortDescriptor sortDescriptorWithKey:@"aisle.displayOrder" ascending:YES];
NSSortDescriptor *sort2 = [NSSortDescriptor sortDescriptorWithKey:@"displayOrder" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObjects:sort1, sort2, nil];

NSFetchedResultsController *controller = [[NSFetchedResultsController alloc] initWithFetchRequest:request
    managedObjectContext:self.managedObjectContext
    sectionNameKeyPath:@"aisle.displayOrder"
    cacheName:@"fetchControllerCache"];

次に、各材料について、イベントの数を数えることができます(そしてそれをテーブルに表示します)。

int numberOfEvents = theIngredient.recipe.events.count;
于 2012-08-23T19:24:00.727 に答える
0

次の述語が必要だと思います:

recipe.events.@count > 0

IngredientsそれはあなたがあらゆるRecipesものに慣れるでしょうEvent.

または、特定の のIngredientsいずれかで使用されるを探している場合は、次のようになります。RecipeEvent

[NSPredicate predicateWithFormat:@"ANY recipe.events = %@", specificEvent]

ソート記述子はaisle.displayOrder、 だけでなく、 になる可能性がありますaisle

于 2012-08-23T18:05:03.240 に答える