2012-06-14 9 views
9

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

どのようにすればいいですか?NSPredicate内の抽象クラスの実際の型をどのようにテストできますか?任意のアイデアや提案?

enter image description here

私が見つけた唯一の手がかりは: How can you reference child entity name in a predicate for a fetch request of the parent entity?

はそれがRecipeQuantifiedIngredientであるかどうかを知るために私QuantifiedIngredientでカスタムプロパティを働くだろうか?たとえば、isRecipeQuantifiedIngredient?

おかげであなたの助けのためにたくさん。

答えて

1

は、SQLの私の考えです:

SELECT * FROM quantifiedIngredients WHERE recipe <> NULL 

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

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

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

はもちろん、これはすべてのquantifiedIngredientsを列挙するCoreDataを必要とするが、私はそれがとにかくそうする必要があります推測、およびreturn nilは小さなコードに最適化する必要があります。もう1つの考慮点は、これが残りのコードに悪影響を与えるかどうかです。その電話をかける必要があります。私はこれを最後の仕上げとして心にポップ

もう一つのアイデアは、このような何かを行うことです(私はは今、本当に緩い私の擬似コードで取得しています):

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

は、私が何を意味するかを参照してください?私はCoreDataが述語またはfetchedThingamabobbersで作業するときに何らかのカーソルを使ってプレイできるかどうかを忘れてしまいます。もしこれがあなたの最善の策だと思うのであれば。とにかく、日曜日の午後ですので、物事は読者のための運動として残されています。

+1良い質問です。

+0

問題は、SQLが継承または多対多の関係がないエンティティリレーションシップモデルを使用することです。したがって、Core Dataはオブジェクトモデル(継承と多対多の関係を持つ)を使用するため、SQLレベルでの作業は意味をなさない。つまり、C++でプログラムを作成し、アセンブラでいくつかの変更を加えたようなものです(それほど重くはありません)。 – Ricardo

+0

あなたはrespondsToSelectorについて何を私が探している、それは何かclassNameを呼び出しているようだが、SQLのperististentストアでは動作しませんが、他の人と動作します。それは好奇心です。 classNameまたはrespondsToSelector以外に、キャストはどうですか? 私はAppleに1週間前に電子メールを送りました。彼らは私がこのことについて研究しなければならないと言いました(それは有給の質問です)。 – Ricardo

+0

答えはありませんが、あなたが言ったことはとても面白いです。どうもありがとう。 – Ricardo

2

RecipeQuantifiedIngredientrecipeが必要な場合は、ingredient.recipeがあるかどうかを確認するフェッチを試行できます。私は、それが動作すると思う。

フラグの種類のカスタムプロパティも有効です。 recipeQuantifiedIngredientをすべて追加または削除すると、その設定と解除が必要になります。私はここにCoreData-話すにこれを翻訳するための時間を取るしたくない

+0

NSPredicateからの継承に対処することができるかどうか、実際の問題ですか?私はすでにフラグを追加することを考えましたが、モデリングの観点からは、それは回避策かもしれませんが、厄介な解決策です。とにかくありがとう。 – Ricardo

関連する問題