核心数据:根据实体类型对抽象实体的结果进行排序
Posted
技术标签:
【中文标题】核心数据:根据实体类型对抽象实体的结果进行排序【英文标题】:Core Data: Sorting results from an abstract entity based on entity type 【发布时间】:2011-09-22 14:32:26 【问题描述】:是否可以根据实体类型对Core Data的结果进行排序,但是:
无需添加名为entityType
之类的虚假属性,并且
不会通过使用 KVO/KVC 技巧(例如引入 -(NSString*)typeOfEntity
或类似方法)对性能产生不利影响?
我目前有:
TradeDocument
作为抽象实体,带有
QuoteTradeDocument
和 InvoiceTradeDocument
作为基于它的实体。
我想显示实体类型和/或允许基于此对 NSTableView
进行排序。
我在 OS X 上使用 Cocoa 绑定。
注意:我明确地试图避免每个对象出错。
【问题讨论】:
【参考方案1】:伊万,
抽象实体的唯一限制是您不能实例化一个。您仍然可以获取它们。然后,测试每个托管对象是哪个子类是一件相当简单的事情。
按类型排序不是排序描述符可以做的事情,而是一个函数可以做的事情,就像-sortUsingFunction:context:
一样。
安德鲁
【讨论】:
然而,这意味着每个对象都会出错。我试图避免这种情况。由于 Core Data 必须在 SQLite 中存储对象类型,我非常想知道是否有一种公开的方式可以将其用作排序标准。 Ivan,您可以读入对象而不会出错或填充行缓存。请参阅 NSFetchRequest 上的 -includesPropertyValues。您将能够使用 -isKindOfClass: 内省对象的种类,而不会触发错误。换句话说,我上面的答案仍然可以正常工作。如果您希望排序发生在 SQLite 中,那么我认为您不走运。安德鲁 谢谢。很遗憾,Apple 没有想到这种排序并将其应用到 SQLite 中。我可能不得不将获取请求放入代码中的 NSArrayController 中,对吧?您的解决方案似乎不错,但我会看看其他人是否提供了更优化的解决方案,一种可以在持久存储中使用某种现有的、索引的数据结构的解决方案。如果没有人来,我会接受你的回答。 Ivan,Core Data 与 ORM 不同。正如他们所说,它是一个对象图管理器。 SQLite 只是几种持久性机制之一。 我完全清楚这一点。但是,如果 SQLite 后端可以为恢复部分对象图提供可能的优化,那么使用它会很有趣。以上是关于核心数据:根据实体类型对抽象实体的结果进行排序的主要内容,如果未能解决你的问题,请参考以下文章