9

コアデータを使用して、データを取得したいと思います。私のモデルはいくつかの抽象エンティティを使用しています。添付の​​図を参照してください。ここで、QuantifiedIngredient は抽象クラスです。少なくとも 1 つの RecipeQuantifiedIngredients を持つ Ingredient エンティティをフェッチしたいのですが、その中間には抽象クラスである QuantifiedIngredient があります。

どうすればそれを行うことができますか? NSPredicate 内の抽象クラスの実際の型をテストするにはどうすればよいですか? アイデアや提案はありますか?

ここに画像の説明を入力

私が見つけた唯一の手がかり は、親エンティティのフェッチ要求の述語で子エンティティ名をどのように参照できますか?

RecipeQuantifiedIngredient であるかどうかを知るために、QuantifiedIngredient のカスタム プロパティを使用しますか? たとえば isRecipeQuantifiedIngredient?

どうもありがとうございました。

4

2 に答える 2

2

recipeで必要な場合はRecipeQuantifiedIngredient、フェッチを実行して、存在するかどうかを確認できますingredient.recipe。私はそれがうまくいくと思います。

フラグのようなカスタムプロパティも機能します。すべてを追加または削除するたびに、設定と設定解除を行う必要がありますrecipeQuantifiedIngredient

于 2012-06-18T10:46:47.230 に答える
1

これを CoreData の話に翻訳するのに時間をかけたくないので、SQL での私の考えは次のとおりです。

SELECT * FROM quantifiedIngredients WHERE recipe <> NULL

またはそのようなもの。これは基本的に、「フラグ」がプロパティの存在であることを除いて、フラグを使用するというニキータの提案です。GroceryQuantifiedIngredientsに直面したときに CoreData がどのように反応するかはわかりません。KVO はrecipe例外をスローすると思います。カテゴリを追加するほど大胆かもしれません:

@interface GroceryQuantifiedIngredients (KVOHack)
-(id)recipe;
@end

@implementation GroceryQuantifiedIngredients (KVOHack)
-(id) recipe { return nil; }
@end

もちろん、これには CoreData がすべての量化された成分を列挙する必要がありますが、とにかくそうする必要があり、return nil小さなコードに最適化する必要があると思います。もう 1 つの考慮事項は、これがコードの残りの部分に悪影響を与えるかどうかです。あなたはその電話をかける必要があります。

これを仕上げる際に頭に浮かぶもう 1 つのアイデアは、次のようなことです (現在、疑似コードが非常に緩くなっています)

SELECT * FROM quantifiedIngredients WHERE [i respondsToSelector:@selector(recipe)];

私が何を意味するか分かりますか?述語またはフェッチされたThingamabobbersを操作するときにCoreDataである種のカーソルを操作できるかどうかを忘れてしまいました.これが最善の策だと思います. いずれにせよ、今日は日曜日の午後なので、読者の練習問題として残します。

良い質問には+1。

于 2012-06-24T20:06:35.400 に答える