Core Data中没有关系的两个实体是糟糕的设计?

时间:2015-12-26 09:59:35

标签: ios swift core-data

我有以下实体:

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的总和。

这是一个糟糕的设计吗?如果是这样,任何想法如何正确地做到这一点?

1 个答案:

答案 0 :(得分:2)

您的Payment实体中应该有一个日期属性,这就是您所需要的。

要累计一段时间,只需确定要总结的句点的开始和结束日期,然后使用此谓词进行提取:

NSPredicate(format: "date > %@ && date < %@", startDate, endDate)

键值编码将帮助您有效地计算总和。

let sum = results.valueForKeyPath("@sum.amount") as! NSNumber