objective c - ¿Cómo crear una NSFetchRequest que filtra los objetos de Core Data en función de los atributos y las relaciones?
objective-c cocoa (1)
Puede recorrer relaciones en NSPredicate
. Por ejemplo, podrías escribir algo como
[NSPredicate predicateWithFormat:@"title == %@ AND blockbuster.name LIKE /"Blockbuster C/"", @"Transformers 2"]
Ahora, si no tiene una propiedad para comparar y necesita verificar objetos reales, entonces podría usar algo como
[NSPredicate predicateWithFormat:@"title == %@ AND blockbuster IN %@", @"Transformers 2", setOfBlockbusters]
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 usan los valores, no las claves).
Tengo una configuración de modelo de Core Data así:
- Entidad de Blockbuster
- Relación To-Many con entidades de DVD .
- Entidad de DVD
- atributo del título (cadena)
- Una relación con una entidad Blockbuster padre
Un solo Blockbuster puede tener varios DVD dentro (To-Many). Cada DVD solo puede ser parte de un solo Blockbuster (To-One).
Hay varios 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 podría 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 comprar el DVD Transformers 2 de Blockbuster C. No quiero las copias de Blockbuster A o G , porque mi jefe frecuenta allí, y solo puedo escapar quemando esta basura en Blockbuster C.
Mi pregunta es, ¿cómo puedo formar un NSFetchRequest que toma un DVD con el título "Transformers 2", que es hijo de la entidad matriz "C" de Blockbuster ?
Este tipo de solicitud captará todos los DVD de "Transformer 2", pero no el específico para 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 alguna forma de pasar, por ejemplo, el Object ID de un objeto relacionado dentro de NSPredicate, filtrando en función de eso?