Базовые данные: результаты группировки и подсчета возвращают пустой список
Рассмотрим следующую сущность 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
возвращает только объекты из файла хранилища, а не ожидающие изменения. Поэтому вы должны сохранить контекст в постоянном хранилище перед выполнением этого запроса на выборку.