Я хочу, чтобы максимальное значение поля в основных данных, так что я создал следующий запрос:выражение NSDictionaryResultType не принимая во внимание недавно вставленные объекты
// 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];
}
Однако, казалось бы, это не принимая во внимание все новые объекты, которые были вставлены в контекст перед началом работы. Так ли это должно работать? Он работает только на объектах в магазине?
Я не могу найти ссылки на него в документах.
Спасибо,
Майк
В то время как это сработает, оно будет полагаться на то, чтобы каждый объект, отвечающий критериям, был первым. В моем случае это было бы слишком много объектов. Мне нужны Core Data, чтобы вычислить это с помощью агрегированного оператора SQL в хранилище данных. –
В этом случае вы можете просто использовать NSSortDescriptor и fetchLimit 1, а затем загружать только один объект. – malhal