ich den maximalen Wert eines Feldes in Kerndaten wollen, damit ich gesetzt haben folgende Anfrage auf:NSDictionaryResultType Ausdruck nicht berücksichtigt neu eingefügten Objekte
// 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];
}
aber es scheint, dass es nicht berücksichtigt alle neuen Objekte, die zuvor in den Kontext eingefügt wurden. Soll es so funktionieren? Funktioniert es nur für Objekte im Geschäft?
Ich kann keinen Verweis auf es in der Dokumentation finden.
Danke,
Mike
Während dies funktionieren würde, würde es sich darauf verlassen, jedes Objekt, das die Kriterien erfüllt, zuerst in den Speicher zu bringen. In meinem Fall wären das viel zu viele Objekte. Ich benötigte Core Data, um dies über eine aggregierte SQL-Anweisung für den Datenspeicher zu berechnen. –
In diesem Fall können Sie einfach einen NSSortDescriptor und ein fetchLimit 1 verwenden, dann laden Sie nur das einzelne Objekt. – malhal