我有以下实体:
class Payment: NSManagedObject {
@NSManaged var name: String
@NSManaged var amount: Double
}
在某一天,我会多次付款。在一天结束时,我想收取全部付款并将其保存在某个地方:
class TotalPayment {
@NSManaged var date: NSDate
@NSManaged var total: Double
}
我需要这个,因为在某些时候我想得到特定时期每天的总付款总额。
例如,我想接受过去30天或100天内支付的总金额,因此我需要该期间TotalPayment::total
属性的总和。
但我不知道如何在这两者之间建立关系。 TotalPayment
不会保留Payment
个对象,只是Payment::amount
的总和。
这是一个糟糕的设计吗?如果是这样,任何想法如何正确地做到这一点?
答案 0 :(得分:2)
您的Payment
实体中应该有一个日期属性,这就是您所需要的。
要累计一段时间,只需确定要总结的句点的开始和结束日期,然后使用此谓词进行提取:
NSPredicate(format: "date > %@ && date < %@", startDate, endDate)
键值编码将帮助您有效地计算总和。
let sum = results.valueForKeyPath("@sum.amount") as! NSNumber