2011-07-29 5 views
6

CoreData初心者取得の関係は、私はCoreDataで簡単な問題を抱えている

オブジェクト。私のモデルは現在、Aと呼ばれる2つのエンティティを、持っているとB.エンティティAは、私はこのコードでエンティティAを取得していますエンティティA.

に逆の関係を持っているBエンティティの多くの関係にあります。

NSManagedObjectContext *context = [self managedObjectContext]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"A" 
              inManagedObjectContext:context]; 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:entity]; 

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"name" 
                  ascending:YES]; 
[request setSortDescriptors:[NSArray arrayWithObject:descriptor]]; 

NSError *error = nil; 
NSArray *items = [context executeFetchRequest:request error:&error]; 

if (error) /* ... */; 

for (id item in items) 
{ 
    /* ... */ 
} 

[request release]; 
[descriptor release]; 

今、私はそのループの中で、Aの関係によって指し示されているすべてのオブジェクトBの配列を取得したいと思います。これをどのように達成できますか?別のフェッチリクエストを作成するか、より現実的な方法がありますか?

StackOverflowを検索して同様の質問がありましたが、時にはあまりにも曖昧です。

答えて

10

NSFetchRequestには-setRelationshipKeyPathsForPrefetching:というインスタンスメソッドがあります。

このメソッドは、キーパスとの関係で定義されたオブジェクトをプリフェッチするために使用されるキー名の配列をとります。新しいコードで更新あなたの例を考えてみます。

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:entity]; 
NSString *relationshipKeyPath = @"bObjects"; // Set this to the name of the relationship on "A" that points to the "B" objects; 
NSArray *keyPaths = [NSArray arrayWithObject:relationshipKeyPath]; 
[request setRelationshipKeyPathsForPrefetching:keyPaths]; 

を今、あなたはあなたのフェッチ要求を完了すると、それらの関係のすべてのオブジェクトはに障害が発生し、行く準備する必要があります。

関連する問題