2011-07-29 87 views
6

CoreData初學者取關係對象

我有CoreData一個簡單的問題。我的模型有兩個實體,現在被稱爲A和B.實體A有A到B實體的許多關係,這有實體A.一個反比關係

我找回實體A和驗證碼:

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]; 

現在,一旦你完成你的讀取請求時,所有這些關係的對象應在受到指責,並準備去。