特にイベントに属するレシピから、レシピに関連するすべての食材を返すにはどうすればよいですか? そして、通路で注文しますか?
さらなる説明:
ユーザーは、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 個