Chcę maksymalną wartość pola w danych podstawowych więc utworzyły następujące żądanie:wyrażenie NSDictionaryResultType nie biorąc pod uwagę nowo wstawionych obiektów
// 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];
}
Jednak wydaje się, że nie bierze pod uwagę żadnych nowych obiekty, które zostały wstawione do kontekstu przed ręką. Czy to ma działać? Czy działa tylko na obiektach w sklepie?
Nie mogę znaleźć żadnego odniesienia do niego w dokumentach.
Dzięki,
Mike
Podczas gdy to by działało, polegałoby na tym, że najpierw wprowadzi do pamięci każdy obiekt spełniający kryteria. W moim przypadku byłoby to o wiele za dużo przedmiotów. Potrzebowałem Core Data do obliczenia tego poprzez zagregowaną instrukcję SQL przeciwko hurtowni danych. –
W takim przypadku wystarczy użyć NSSortDescriptor i fetchLimit 1, a następnie załadować tylko do pojedynczego obiektu. – malhal