我想要这两个实体:
Payment
- name
- date
- value
Day
- date
- value
我想使用 Day
实体在一天结束时保存 Payments
的总数,以便更容易地计算周/月/年的平均值。
我看不出这两者之间有任何关系。我是否必须为每个实体使用上下文?还是有一种简单的方法来使用支付实体?
最佳答案
I don't see any relationship between these two.
您应该在日期和付款之间建立一对多关系。
您可以在 Day 实体的 Relationships
部分添加关系。不要忘记设置反向关系和 To Many
类型。
Day 的 average
属性的两种方法:
- 将其存储在 CoreData 中,并在当天每次添加新的付款对象时进行更新。如果您需要经常读取平均值,这将很有意义。
- 您可以定义 Day 实体的计算属性,并使用该特定日期的所有
payments
对其进行动态计算。如果您经常这样做,这可能会导致性能问题,但您不需要在每次插入或删除付款时都更新该值。
附言您说您还需要计算平均月/年。只是不要为此目的使用 Day 的平均值。我的意思是一个月的平均天数不是那个月的平均付款
Do I have to use a context for each entity?
不,你不知道。您的实体应该生活在相同的上下文中。
Or is there a easy way to just use Payment entity ?
您完全可以在没有 Day 实体的情况下完成它,只需为 Payment
实现便捷的类方法,如下所示。同样,缺点是每次需要平均值时,您都在执行所有这些获取操作和计算,如果您经常需要它,这不是最佳解决方案。
class func payments(from fromDate: NSDate, to toDate: NSDate) -> [Payment] {
let predicate = NSPredicate(format: "date > %@ && date < %@", fromDate, toDate)
//fetch and return payments with predicate
}
class func average(from fromDate: NSDate, to toDate: NSDate) -> Double {
let payments = payments(from: fromDate, to: toDate)
//calculate average of fetched payments
}
关于ios - 如何在核心数据中为两个实体场景构造数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40069365/