voglio il massimo valore di un campo nei dati di base così ho predisposto la seguente richiesta:NSDictionaryResultType espressione non tenendo conto di nuovi oggetti inseriti
// Create fetch
NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
[fetch setEntity:[NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:context]];
[fetch setResultType:NSDictionaryResultType];
// Expression for Max ID
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"myNumbericID"];
NSExpression *minExpression = [NSExpression expressionForFunction:@"max:" arguments:[NSArray arrayWithObject:keyPathExpression]];
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
[expressionDescription setName:@"maxID"];
[expressionDescription setExpression:minExpression];
[expressionDescription setExpressionResultType:NSDoubleAttributeType];
[fetch setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];
// Execute the fetch.
double theID = 0;
NSError *error;
NSArray *objects = [context executeFetchRequest:fetch error:&error];
if (objects && [objects count] > 0) {
theID = [((NSNumber *)[[objects objectAtIndex:0] valueForKey:@"maxID"]) doubleValue];
}
Tuttavia sembrerebbe che non sta prendendo in considerazione qualsiasi nuovo oggetti che sono stati inseriti nel contesto prima della mano. È così che dovrebbe funzionare? Funziona solo sugli oggetti nel negozio?
Non riesco a trovare alcun riferimento ad esso nei documenti.
Grazie,
Mike
Mentre ciò funzionerebbe, farebbe affidamento sul portare prima in memoria tutti gli oggetti che soddisfano i criteri. Nel mio caso questo sarebbe di gran lunga troppi oggetti. Avevo bisogno di Core Data per calcolare questo tramite un'istruzione SQL aggregata contro l'archivio dati. –
In tal caso, è sufficiente utilizzare un NSSortDescriptor e un fetchLimit 1, quindi caricare solo il singolo oggetto. – malhal