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