单个 fetchedResultsController 中的不同实体类型?

Posted

技术标签:

【中文标题】单个 fetchedResultsController 中的不同实体类型?【英文标题】:different entity types in a single fetchedResultsController? 【发布时间】:2009-08-03 02:30:23 【问题描述】:

我有一个 UITableView,它显示两种不同的实体类型——每一行可以是 EntityA 或 EntityB。 cellForRowAtIndexPath 查看类类型并确定如何创建单元格。

我正在使用 Core Data 持久化我的对象,并希望使用 fetchedResultsController 来管理这个 tableview,因为它具有内存管理的好处。但是,我无法找到一种方法来创建可以获取多种类型实体的 fetchedResultsController。因为 fetchedResultsController 初始化器接受一个 NSFetchRequest,而后者只允许识别单个实体,所以我认为我想做的事情是不可能的。

假设不是,我还有什么选择?我可以做类似单表继承的事情,创建一个合并我的两个实体的特征的实体模型(它们是相似的)吗?这会增加我的代码的复杂性并显着削弱打字,但用户永远不会知道其中的区别。

欢迎所有建议。

谢谢!

/afb

【问题讨论】:

【参考方案1】:

没有真正的方法可以使用这个类来克服每个 NSFetchResultsController 的 1 个实体。

但是,如果您仍然想享受使用这个处理大量数据的类的好处,您可以创建两个或多个 NSFetchedResultsController 并使用 UITableViewDataSourceProtocol 的方法在它们之间切换。如果您计划为每个实体使用一个部分,这尤其容易。

【讨论】:

【参考方案2】:

您可以在一个提取请求中轻松完成此操作。只需使用实体继承。让 EntityA 和 EntityB 都是某个抽象实体的子类,比如 EntityX。然后将获取请求的 NSEntityDescription 设置为 EntityX。不确定如何在谓词中为某些子实体指定属性键。

【讨论】:

以上是关于单个 fetchedResultsController 中的不同实体类型?的主要内容,如果未能解决你的问题,请参考以下文章

numberOfRowsInSection 中 fetchedResultsController 的奇怪行为

FetchedResultsController 中没有部分

如何将对象从 fetchedResultsController 到 Plist?

fetchedResultsController 对象的表视图部分

fetchedResultsController 和 Integer

将 fetchedResultsController 更改为 protected from private