2009-10-06 20 views
28

Tengo una configuración de modelo de datos básicos de este modo:Cómo crear un NSFetchRequest que filtra los objetos de Datos básicos en función de los atributos Y las relaciones?

  • Blockbuster Entidad
    • relación A-Muchos de DVD entidades.
  • DVD Entidad
    • título atributo (cadena)
    • a-uno a uno de los padres Blockbuster entidad

Una sola Blockbuster puede tener varios DVD dentro de él (Para muchos). Cada DVD solo puede ser parte de un solo Blockbuster (To-One).

Hay múltiples Blockbuster, y algunos pueden contener entidades de DVD que comparten el mismo título que las entidades de DVD de otros Blockbuster. Por ejemplo, Blockbuster A puede tener una copia de "Transformers 2", al igual que Blockbuster C y Blockbuster G. Imaginemos que Blockbuster tiene más de una copia de la misma película titulada.

estoy interesado en agarrar los Transformers 2 DVD de Blockbuster C. No quiero las copias de Blockbuster A o G, porque mi jefe frecuenta allí, y solo puedo escapar quemando esta pieza de basura en Blockbuster C.


Mi pregunta es, ¿cómo puedo formar una NSFetchRequest el que agarra un DVD con los título "Transformers 2", que es un hijo de la superproducción entidad matriz "C"?

Este tipo de solicitud se agarra todo el "Transformer 2" DVD, pero no el específico a la entidad Blockbuster C:

NSManagedObjectContext *moc = [self managedObjectContext]; 

NSString *aTitle = @"Transformers 2"; 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title == %@", aTitle]; 
[request setEntity:[NSEntityDescription entityForName:@"DVD" inManagedObjectContext:moc]]; 
[request setPredicate:predicate]; 

NSError *error = nil; 
NSArray *results = [moc executeFetchRequest:request error:&error]; 

// error handling code 
[request release]; 

¿Hay una manera de pasar, por ejemplo, el ID del objeto de un objeto relacionado dentro de NSPredicate, filtrado basado en eso?

Respuesta

46

Puede recorrer relaciones en un NSPredicate.Por ejemplo, podría escribir algo así como

[NSPredicate predicateWithFormat:@"title == %@ AND blockbuster.name LIKE \"Blockbuster C\"", @"Transformers 2"] 

Ahora, si usted no tiene una propiedad para comparar contra y lo que necesita para comprobar los objetos reales, entonces se podría usar algo como

[NSPredicate predicateWithFormat:@"title == %@ AND blockbuster IN %@", @"Transformers 2", setOfBlockbusters] 

El la sintaxis completa está documentada here. Pero setOfBlockbusters podría ser un conjunto, una matriz o un diccionario (si se trata de un diccionario, se utilizan los valores, no las claves).

+0

Muchas gracias, ¡eso fue todo! Y gracias por el enlace a los documentos. Muy útil. :) –

Cuestiones relacionadas