ios - 如何在核心数据中为两个实体场景构造数据

标签 ios swift core-data

我想要这两个实体:

Payment
 - name
 - date
 - value

Day
 - date
 - value

我想使用 Day 实体在一天结束时保存 Payments 的总数,以便更容易地计算周/月/年的平均值。

我看不出这两者之间有任何关系。我是否必须为每个实体使用上下文?还是有一种简单的方法来使用支付实体?

最佳答案

I don't see any relationship between these two.

您应该在日期和付款之间建立一对多关系。

enter image description here

您可以在 Day 实体的 Relationships 部分添加关系。不要忘记设置反向关系和 To Many 类型。

enter image description here

Day 的 average 属性的两种方法:

  1. 将其存储在 CoreData 中,并在当天每次添加新的付款对象时进行更新。如果您需要经常读取平均值,这将很有意义。
  2. 您可以定义 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/

相关文章:

ios - 图片下载保存导致内存压力

swift - 如何对加速度计进行编码以使其具有固定的 x 位置

core-data - 我可以在具有删除规则的关系的实体上使用 NSBatchDeleteRequest 吗?

ios - 协议(protocol) 'View' 只能用作通用约束,因为它具有 Self 或关联类型要求

c# - 用数组填充 UITableView

检查 SSH 私钥是否加密

objective-c - 如何在 Swift 中更改覆盖函数返回类型

iphone - 使用 Core Data 在 UITableView 中显示 "No rows found"消息

core-data - core data父级并发类型和core data子级并发类型有什么限制?

ios - 在 Collectionview 中如何根据选择设置颜色?