2009-07-21 26 views
5

Tengo un modelo de semana que tiene el día como objetos secundarios. Hay una propiedad de relación de "días" en el modelo de Semana para acceder a todos los objetos Day asociados. El modelo de día tiene una propiedad de duración.Cómo usar @sum con CoreData

¿Cómo puedo calcular la suma de las duraciones del día para un objeto específico de la semana? Sería genial tener un ejemplo de código sobre cómo crear un objeto predicado con la función @sum.

También es posible tener la propiedad "calculada" weekDuration en la clase Week que tiene el valor de la suma de las duraciones relacionadas del día durante la recuperación? Sería la solución más elegante para esos problemas, pero no creo que eso sea posible con CoreData.

Respuesta

8

Aquí es un ejemplo de la forma en que lo haría configurar su consulta para encontrar sólo unas semanas, donde la suma de la duración de los días es mayor que 100.

NSManagedObjectContext *context = ...; 
NSManagedObjectModel *model = ...; 
NSFetchRequest *fr = [[NSFetchRequest alloc] init]; 
fr.entity = [model.entitiesByName objectForKey:@"Week"]; 

//This predicate will be compiled into pure SQL 
fr.predicate = [NSPredicate predicateWithFormat:@"[email protected] > 100"]; 

NSError *error = nil; 
NSArray *results = [context executeFetchRequest:fr error:&error]; 
if (error) { 
    NSLog(@"ERROR: %@", error); 
} 
NSLog(@"Results: %@", results); 

En realidad se puede aplicar la propiedad calculado en un similiar De esta forma, simplemente agregue esto a la subclase NSManagedObject que respalda su entidad Week:

- (NSNumber *) duration { 
    return [self valueForKeyPath:@"[email protected]"]; 
}