Базовые данные: результаты группировки и подсчета возвращают пустой список

Рассмотрим следующую сущность Core Data:

Person - personId: NSNumber, имя: NSString, должность: NSString

Используя Core Data, я пытаюсь повторить следующий SQL-запрос:

SELECT `position`, COUNT(*) FROM `Person` GROUP BY `position`

Ниже приведен эквивалент цели c:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person"]

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];

NSExpression *keyPathExpression = [NSExpression expressionForKeyPath: @"position"];
NSExpression *countExpression = [NSExpression expressionForFunction:@"count:" arguments:@[keyPathExpression]];

NSAttributeDescription *positionDescription = [entity.attributesByName objectForKey:@"position"];
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];

[expressionDescription setName:@"count"];
[expressionDescription setExpression:countExpression];
[expressionDescription setExpressionResultType:NSInteger32AttributeType];

[request setPropertiesToFetch:@[positionDescription, expressionDescription]];
[request setPropertiesToGroupBy:@[positionDescription]];
[request setResultType: NSDictionaryResultType];

NSError *error = nil;
NSArray *results = [context executeFetchRequest: request error: &error];

Сущность Person определенно заполняется, однако при выполнении приведенного выше кода results массив пуст. Мысли?

1 ответ

Решение

(Из моих комментариев выше:) Запрос запроса с NSDictionaryResultType возвращает только объекты из файла хранилища, а не ожидающие изменения. Поэтому вы должны сохранить контекст в постоянном хранилище перед выполнением этого запроса на выборку.

Другие вопросы по тегам