【问题标题】:Swift - Core Data - using the result of fetch with GroupBySwift - 核心数据 - 使用 GroupBy 获取的结果
【发布时间】: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


【解决方案1】:

(dailyFetchResult[0] as! [String:Any]).keys(dailyFetchResult[0] as! [String:Any]).values 做到了。谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    相关资源
    最近更新 更多