在 Core Data 之外重用 NSManagedObject 的结构
Posted
技术标签:
【中文标题】在 Core Data 之外重用 NSManagedObject 的结构【英文标题】:Reusing the structure of NSManagedObjects outside of Core Data 【发布时间】:2012-07-26 14:18:28 【问题描述】:我有一个NSManagedObject
SharePrices,其中包含DateTime
属性和NSNumbers
用于股价,并存储在标准核心数据“数据库”中。由于我想按月对一些股价进行分组,我想为每个月创建新的 SharePrice 对象并在每个对象中存储当月的平均股价,日期将设置为月。
如何在我的 SharePrices NSManagedObject
中存储此月度信息,而无需使用 insertNewObjectForEntityForName
创建它并将其保存到商店。还是我需要为托管对象创建一个类别并将分组代码放在那里?基本上,我只想在没有任何核心数据支持的情况下重用我现有的 SharePrice 结构。
谢谢!
【问题讨论】:
【参考方案1】:我强烈建议不要在数据库上下文之外重新使用NSManagedObject
派生的对象。在这里和那里重用几个字段的机会不值得失去这种方法所导致的清晰度。
问题是,您计划创建的聚合股价对象不代表股价 - 相反,它代表一段时间内的股价聚合。因此,使用同一个类来表示两种对象并不是一个好主意:它们在概念上是不同的。您的方法的另一个问题是NSManagedObject
包含许多在数据库上下文之外无用的东西,例如对象 ID、对托管对象上下文的引用等。让它们处于无意义的状态会误导任何维护您的应用程序的人。
【讨论】:
您是否建议创建一个单独的(标准,非NSManagedObject
)类来存储聚合数据并处理聚合逻辑?
@AlexR 我肯定会推荐添加一个单独的类。它也可以处理聚合逻辑——例如,通过累积项目数和运行总数,并根据请求计算平均值。这样,您就可以随时将更多项目添加到平均值中。同一个类还可以通过保持迄今为止看到的最小和/或最大日期来处理日期计算,从而使新类的接口非常容易理解。以上是关于在 Core Data 之外重用 NSManagedObject 的结构的主要内容,如果未能解决你的问题,请参考以下文章
将 Core Data 与图像或按钮(或除了 tableView 之外的任何东西)一起使用
如何删除 Core Data 存储中除一个对象之外的所有对象?