2010-03-11 12 views
7

Soy nuevo en los datos básicos e intento obtener todos los objetos secundarios de varios tipos con una consulta. Supongamos que hay un tipo "Animal" como padre y "Gato", "Perro" y "Ave" cuando eran niños. Me gustaría obtener tanto gatos como perros, pero no Birds en una sola consulta devuelta como objetos de Animal. ¿Es posible?¿Cómo se usa NSPredicate para atrapar objetos secundarios?

Respuesta

5

Managed objects have an entity property, por lo que debe ser capaz de combinar con Kevin Sylvestre's solutiona predicate de entity.name != "Bird".

+0

entidad es un método, no una propiedad .. – cocoapriest

+1

Es una propiedad informal, en la medida en que puede usar KVC para acceder a ella (ya que hay un método allí), a diferencia de una formal ('@ propiedad'). –

+0

En realidad, no puede usar este método con una tienda SQLite porque la propiedad 'entidad' no está disponible cuando los objetos tienen una falla. No tiene más remedio que hacer un paso de filtro posterior a la búsqueda. –

3

Sí, es posible:

// Load delegate from application and context from delegate. 
SampleAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
NSManagedObjectContext *context = delegate.managedObjectContext; 

// Create new request. 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 

// Create entity description using delegate object context. 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Animal" inManagedObjectContext:context]; 

// Set entity for request. 
[request setEntity:entity]; 
[request setIncludesSubentities:YES]; 

// Load array of documents. 
NSError *error; 
NSArray *animals = [context executeFetchRequest:request error:&error]; 

// Release request. 
[request release]; 

// Access array. 
for (id animal in animals) { } 
+0

gracias por la respuesta rápida. Lo siento, olvidé mencionar lo más importante: hay un hijo más (por ejemplo, "Ave"). Lo que necesito es obtener tanto gatos como perros, pero NO aves. He editado la pregunta principal – cocoapriest

0

Si bien esto (entity.name != "Bird") puede funcionar si solo tiene "Gato", "Perro" y "Ave", no funciona si luego agrega más "Animales". También puede usar entity.name == "Dog" && entity.name == "Cat"

Es un caso de "... ¿Alguna vez tendrá otro, en su caso, Animales?"

Have fun =)

Cuestiones relacionadas