【发布时间】:2021-10-11 16:09:27
【问题描述】:
我找不到这个问题的答案,我在这里检查了所有问题。
总结:
我不知道如何将 .fetch() 方法的结果(我成功返回)与 GroupBy 一起使用。 fetch 方法结果必须有.dictionaryResultType,因为我使用的是GroupBy,否则GroupBy 将不起作用。我可以看到 fetch 返回[Any],所以是Any 的数组。但是我尝试投射/使用/访问这个 [Any] 它失败了。
我的代码:
//Create new entity
let timeLogEntity = NSEntityDescription.entity(forEntityName: "TimeLog", in: managedContext)!
//sum up the duration column
let keypathDuration = NSExpression(forKeyPath: "duration")
let expression = NSExpression(forFunction: "sum:", arguments: [keypathDuration])
let sumDesc = NSExpressionDescription()
sumDesc.expression = expression
sumDesc.name = "DurationSum"
sumDesc.expressionResultType = .integer64AttributeType
//Fetch request
var timeLogFetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "TimeLog")
//group by region
timeLogFetchRequest.returnsObjectsAsFaults = false
timeLogFetchRequest.propertiesToGroupBy = ["region"]
//sum of duration column
timeLogFetchRequest.propertiesToFetch = [sumDesc, "region"]
timeLogFetchRequest.resultType = .dictionaryResultType
//it works only like this with [Any[\]
var dailyFetchResult: [Any]?
do{
dailyFetchResult = try managedContext.fetch(timeLogFetchRequest)
}catch...
所以 fetch 工作并返回值,我只是不知道如何使用它们,或者将它们转换为任何可用的字典、元组、String 和 Int...
结果如下所示:{DurationSum = 235; region = RegionName1}{DurationSum = 256; region = RegionName2} 等
谢谢
【问题讨论】:
-
当您将 resultType 设置为
dictionaryResultType并且字典的类型为 [String: Any] 时,结果当然是字典。您需要将字典的每个值转换为该属性的类型(sumDesc 和区域) -
谢谢。这就是我正在努力解决的问题 - 制作那个演员......但是我尝试它失败了......
-
获取的结果是一个字典数组;试试 [[String:Any]]。
标签: swift core-data group-by nsdictionary any