按相关属性分组的核心数据提取请求

时间:2017-02-08 12:36:20

标签: swift core-data

我对核心数据很陌生,所以如果我的任何术语出错,请原谅我。

我正试图找到我的未结订单中最畅销的商品。

我有一个名为'OpenOrder'的实体。它与实体'Item'有一个称为'items'的多对多关系。 Item具有属性'quantity'(Int32)和'categoryName'(String) - 这基本上是项目名称。

我有一个谓词,过滤哪些打开我要使用的订单。这部分工作正常。还有已处理的订单,其中包含商品。这是我不仅想获得所有Item实体的原因之一。

我想获得一个包含categoryName和每个字符总数的字典数组。

所以我正在设置我的fetchRequest:

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "OpenOrder")

设定数量总和:

let sumExpression = NSExpressionDescription()
sumExpression.expression = NSExpression(forFunction: "sum:", arguments: [NSExpression(forKeyPath: "items.quantity")])
sumExpression.name = "itemsQuantity"
sumExpression.expressionResultType = .integer64AttributeType

目前,我只是想让这部分工作,所以我只是取了sumExpression:

fetchRequest.propertiesToFetch = [sumExpression]

设置fetchRequest的结果类型:

fetchRequest.resultType = .dictionaryResultType

进行实际获取:

... = (try? managedContext.fetch(fetchRequest)) as? [[String:Any]]

此结果字典采用以下格式:

[["itemsQuantity": 1], ["itemsQuantity": 4], ["itemsQuantity": 2]...

我想按产品分组数量,所以我添加了一个groupBy:

fetchRequest.propertiesToGroupBy = ["items.categoryName"]

但现在我收到以下错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'to-many key not allowed here'

我不确定我到底出错了。这是核心数据可以做的事情,我将如何去做?

非常感谢。

0 个答案:

没有答案