2011-07-29 18 views
6

CoreData acemiFetch İlişki Ben CoreData ile basit sorun var

Nesneleri. Benim modelim iki varlık, şimdiki adıyla A'ya sahiptir ve B A işletmesi ben bu kodla kişiler A alınırken ediyorum

varlık A'ya bir ters bir ilişki vardır B varlıkların birçok ilişki, bir vardır:

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

Şimdi almak istiyorum, bu döngü, B A. ilişkisi ile işaret bütün nesneler dizisi içine nasıl bunu başarabilirsiniz? Başka bir alım isteği veya daha pratik bir yolu yoktur yaratmak mıdır?

Ben StackOverflow arandı ve benzeri sorular bulundu, ancak bazen çok belirsiz ettik.

cevap

10

NSFetchRequest bu -setRelationshipKeyPathsForPrefetching: adlandırılan bir örnek yöntemi vardır.

Bu yöntem, söz konusu kilit yolları olan ilişkilerinde tanımlanan herhangi bir nesne önceden yüklenmesi için kullanılacak anahtar adlarının dizisini alır. Yeni kod ile güncel örneği var sayalım:

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

Artık getirme isteği tamamlamak kez, o ilişki tüm nesneleri hatayla ve gitmek için hazır olmalıdır.

İlgili konular