0

考虑以下核心数据实体:核心数据:GROUP BY和计算结果返回空列表

- PERSONID:NSNumber的,:的NSString,位置:NSString的

使用核心数据,我试图复制以下SQL查询:

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

下面是objective-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数组为空。思考?

+0

你得到一个*空阵列*或*无*?如果你得到零,那么错误变量应该包含一些信息。 –

+0

这是一个空数组。 – krisk

+0

您在执行请求之前*保存了*对象吗?具有NSDictionaryResultType的提取请求仅返回存储文件中的对象。 - 如果你省略了setPropertiesToGroupBy,你会得到结果吗? –

回答

0

(从我上面的评论:)带有NSDictionaryResultType的提取请求只返回来自存储文件的对象,而不是挂起的更改。因此,在执行该提取请求之前,必须将上下文保存到持久性存储中。

+0

你可以给我或指向一个例子,我可以得到所有的实体按特定属性分组吗? – SeriousSam