我对核心数据很陌生,所以如果我的任何术语出错,请原谅我。
我正试图找到我的未结订单中最畅销的商品。
我有一个名为'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'
我不确定我到底出错了。这是核心数据可以做的事情,我将如何去做?
非常感谢。