Quiero que el valor máximo de un campo de datos básicos por lo que han establecido la petición siguiente:expresión NSDictionaryResultType no tener en cuenta los nuevos objetos insertados
// 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];
}
Sin embargo parece que no está tomando en cuenta cualquier nueva objetos que se han insertado en el contexto antes de la mano. ¿Es así como se supone que debe funcionar? ¿Funciona solo en objetos en la tienda?
No puedo encontrar ninguna referencia al respecto en los documentos.
Gracias,
Mike
Si bien esto funcionaría, se basaría en traer todos los objetos que cumplan los criterios primero a la memoria. En mi caso, esto sería demasiados objetos. Necesitaba Core Data para calcular esto a través de una declaración de SQL agregado contra el almacén de datos. –
En ese caso, puede usar un NSSortDescriptor y un fetchLimit 1, luego solo carga en el único objeto. – malhal