2011-07-29 11 views
6

CoreData principianteFetch Relación Objetos

tengo un problema sencillo con CoreData. Mi modelo tiene dos entidades, que ahora se llama A y B. La entidad A tiene una relación de muchas de las entidades B, que tiene una relación inversa a la entidad A.

estoy recuperando las entidades A con este código:

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

Ahora me gustaría recuperar, dentro de ese ciclo, una matriz de todos los objetos B señalados por la relación de A. ¿Cómo puedo lograr esto? ¿Debo crear otra solicitud de búsqueda o hay una forma más práctica?

He buscado StackOverflow y he encontrado preguntas similares, pero a veces demasiado vagas.

Respuesta

10

tiene un método de instancia llamado -setRelationshipKeyPathsForPrefetching:.

Este método toma una matriz de nombres de teclas que se utilizarán para captar previamente cualquier objeto definido en las relaciones con esas rutas clave. Tenga en cuenta su ejemplo, actualizada con el nuevo código:

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

Ahora, una vez que complete su solicitud de búsqueda, todos esos objetos relación debe ser criticado y listo para funcionar.