Ios 如何计算核心数据中一周内每天的总和
在我的应用程序中,我按日期添加了一些事务。每笔交易都会有一个Ios 如何计算核心数据中一周内每天的总和,ios,swift,core-data,Ios,Swift,Core Data,在我的应用程序中,我按日期添加了一些事务。每笔交易都会有一个金额字段,我想计算给定范围内(比如本周)所有交易的总和 如何利用核心数据做到这一点 我想到了两种方法: 迭代日期范围,并计算每次迭代的总和 使用propertiesToGroupBy和propertiesToFetchfromNSFetchRequest 其中一种方法好吗?或者还有其他方法可以做到这一点吗?我设法做到了这一点: let amountExpr = NSExpression(forKeyPath: "amount") let
金额
字段,我想计算给定范围内(比如本周)所有交易的总和
如何利用核心数据做到这一点
我想到了两种方法:
日期范围
,并计算每次迭代的总和propertiesToGroupBy
和propertiesToFetch
fromNSFetchRequest
其中一种方法好吗?或者还有其他方法可以做到这一点吗?我设法做到了这一点:
let amountExpr = NSExpression(forKeyPath: "amount")
let sumExpr = NSExpression(forFunction: "sum:", arguments: [amountExpr])
let sumDescr = NSExpressionDescription()
sumDescr.expression = sumExpr
sumDescr.name = "sumOfAmount"
sumDescr.expressionResultType = .doubleAttributeType
let dateExpr = NSExpression(forKeyPath: "date")
let dateDescr = NSExpressionDescription()
dateDescr.expression = dateExpr
dateDescr.name = "date"
dateDescr.expressionResultType = .dateAttributeType
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Transaction")
request.sortDescriptors = Transaction.defaultSortDescriptors
request.propertiesToFetch = [dateDescr, sumDescr]
request.propertiesToGroupBy = [dateDescr]
request.resultType = .dictionaryResultType
request.returnsObjectsAsFaults = false
request.predicate = Transaction.rangeOfDatesPredicate(dateRange: Date.week())
let results = try! context.fetch(request) as! [NSDictionary]
for value in results {
print(value)
}
我是这样做的:
let amountExpr = NSExpression(forKeyPath: "amount")
let sumExpr = NSExpression(forFunction: "sum:", arguments: [amountExpr])
let sumDescr = NSExpressionDescription()
sumDescr.expression = sumExpr
sumDescr.name = "sumOfAmount"
sumDescr.expressionResultType = .doubleAttributeType
let dateExpr = NSExpression(forKeyPath: "date")
let dateDescr = NSExpressionDescription()
dateDescr.expression = dateExpr
dateDescr.name = "date"
dateDescr.expressionResultType = .dateAttributeType
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Transaction")
request.sortDescriptors = Transaction.defaultSortDescriptors
request.propertiesToFetch = [dateDescr, sumDescr]
request.propertiesToGroupBy = [dateDescr]
request.resultType = .dictionaryResultType
request.returnsObjectsAsFaults = false
request.predicate = Transaction.rangeOfDatesPredicate(dateRange: Date.week())
let results = try! context.fetch(request) as! [NSDictionary]
for value in results {
print(value)
}
设置
propertiesToGroupBy
并使用sum
aggregate可以在数据库中完成这项工作,而您的应用程序只需收集结果。生成的代码也应该更容易阅读。你有一个如何做到这一点的例子吗?我尝试使用propertiesToGroupBy,但我必须将结果类型设置为dictionary,这对我来说不起作用。我现在正在看同样的东西。对我来说,它不起作用,它说:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“传递给setPropertiesToFetch的密钥路径日期无效:'这是当我将NSExpressionDescription添加到propertiesToFetchSettingpropertiesToGroupBy
以及使用sum
aggregate在数据库中工作时,而你的应用程序只是简单地收集结果。生成的代码也应该更容易阅读。你有一个如何做到这一点的例子吗?我尝试使用propertiesToGroupBy,但我必须将结果类型设置为dictionary,这对我来说不起作用。我现在正在看同样的东西。对我来说,它不起作用,它说:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“传递给setPropertiesToFetch的密钥路径日期无效:'这是我将NSExpressionDescription添加到propertiesToFetch的时候