2009-07-21 12 views
5

Ho un modello Week che ha oggetti Day come Day. C'è una proprietà di relazione "giorni" nel modello Week per accedere a tutti gli oggetti Giorno associati. Il modello Day ha proprietà di durata.Come utilizzare @sum con CoreData

Come posso calcolare la somma della durata del giorno per l'oggetto settimana specificato? Sarebbe bello avere un esempio di codice su come creare un oggetto predicato con la funzione @sum.

Inoltre è possibile avere proprietà "weekDuration" calcolate sulla classe Week che ha il valore della somma delle durate del giorno correlato durante il recupero? Sarebbe la soluzione più elegante per questi problemi, ma non credo che sia possibile con CoreData.

risposta

8

Ecco un esempio di come si farebbe configurare il query per trovare solo poche settimane in cui la somma della durata dei giorni è superiore a 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); 

si può effettivamente implementare la proprietà calcolata in un simile in modo semplice, aggiungilo alla sottoclasse NSManagedObject che supporta la tua entità Week:

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