2011-06-29 7 views
1

私のコアデータオブジェクトモデルには、適切な関係を持つ3つのエンティティがあり、MyObjectは多くのMyObjectPropertiesを持ち、各プロパティは1つのMyObjectPropertyImageを持つことができます。コアデータ:述語のオブジェクト

myObjectを指定すると、すべての画像を取得したいと考えています。

[NSEntityDescription entityForName:@"MyObjectPropertyImage" inManagedObjectContext:managedObjectContext]; 
[NSPredicate predicateWithFormat:@"ANY myObjectProperty.myObject == %@", myObject]; 

任意のアイデア:私は、次の述語を使用してそれをやろう

は、しかし、私は空の配列を取得しますか?

答えて

2

コアデータを扱うときは、エンティティをデータベースのテーブルではなく、オブジェクトグラフのエンティティと考えるのが最善です。したがって、述語を使用して他のエンティティに関連するエンティティをフェッチする必要はありません。代わりに、モデルで定義された関係を使用してオブジェクトグラフをナビゲートします。 myObjectに関連するすべての画像を取得するには:あなたのオブジェクトグラフをごmyObjectエンティティのメモリにロードされていない場合、これは、データベースへの追加の旅行をトリガすることが

// assuming the relationships are called 'myObjectProperties' and 'myObjectPropertyImage', respectively 
NSSet *allImages = [myObject.myObjectProperties valueForKey:@"myObjectPropertyImage"]; 

注意を。これを避けるには、フェッチ要求のプリフェッチ関係キーパスをmyObjectに設定してください。

私はあなたが手にMyObjectインスタンスを持っている、それはあなただけの関係をトラバースする必要がmyObjectProperties-->ObjectProperty-->>PropertyImagesの関係パスを持っているので、これは...

+0

ありがとう、それは仕事をした、私はまだ "デ​​ータベース思考"を私の頭から落とす必要があります.. :) – Gytis

0

に役立ちます願っています。

NSArray *images=[myObjectInstances valueForKeyPath:@"myObjectProperties.propertyImage"]; 

(注::。私は間違っている、あなたの属性名を持っているかもしれないが、あなたのアイデアを得ることができます)これは以下のようなものをvalueForKeyPath:

でこれを行うのは簡単です一般的なルールとして

、あなたは時にフェッチしません利用可能なグラフのオブジェクトがあります。述語と一致するオブジェクトの「スレッドを選び出す」ように取り出し、関連するオブジェクトに対するスレッド/関係に従うすべての関連オブジェクトを見つける。

+0

一般的なルールのおかげで!そのため、管理対象オブジェクトを述語に入れるのはあまり意味がないと思います – Gytis

関連する問題