我有以下实体:

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的总和。
这个设计不好吗?如果是的话,有什么正确的方法吗?

最佳答案

您应该在Payment实体中有一个date属性,这就是您所需要的。
要对某个时段求和,只需确定要求和的时段的开始日期和结束日期,然后使用此谓词获取:

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

键值编码将有助于您计算和的效率和极大的方便。
let sum = results.valueForKeyPath("@sum.amount") as! NSNumber

关于ios - Core Data中没有关系的两个实体设计不好?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34470255/

10-10 15:54