Как создать выборку для суммирования по разнице между атрибутами - PullRequest
0 голосов
/ 20 июня 2019

В сущности Shift у меня есть два атрибута startTime и endTime, я хочу взять разницу и затем суммировать по всем извлеченным значениям.

let fetchRequest = NSFetchRequest<NSDictionary>(entityName: "Shift")
        fetchRequest.predicate = shiftPredicate
        fetchRequest.resultType = .dictionaryResultType

        let durationExpression = NSExpressionDescription()
        durationExpression.name = "duration"
        durationExpression.expression = NSExpression(format: "endTime - startTime")
        durationExpression.expressionResultType = .integer16AttributeType

// INSERT A

 do { let result = try
            managedObjectContext.fetch(fetchRequest)
            print("\(result)")
            let resultDict = result.first
            print("\(String(describing: resultDict?["sumDuration"]))")

        } catch let error as NSError {
            print ("Could not fetch \(error), \(error.userInfo)")
        }

Теперь эта выборка возвращает массив словарей, содержащих [{duration, 3}, {duration, 6}], но я хочу суммировать по всем значениям продолжительности.

Я попробовал следующее на INSERT A

       let sumDurationExpression = NSExpressionDescription()
        sumDurationExpression.name = "sumDuration"
        sumDurationExpression.expression = NSExpression(forFunction: "sum:", arguments: ["duration"])
        sumDurationExpression.expressionResultType = .integer16AttributeType
        fetchRequest.propertiesToFetch!.append(sumDurationExpression)

Но происходит сбой при отправке нераспознанного селектора, я также пытался

        durationExpression.expression = NSExpression(format: "sum: (endTime - startTime")
...