核心数据:获取多个实体的任何方式?

时间:2011-02-23 19:49:30

标签: iphone ios core-data

我刚开始使用Core Data,作为一个学习练习,我正在构建一个应用程序,我需要在单个表视图中显示不同类型的对象。

举个例子,假设我有一个“奶酪”的实体和一个与“海盗”无关的实体。在我的应用程序的主屏幕上,用户应该能够创建“奶酪”或“海盗”实例以添加到表格视图。

所以,使用核心数据编辑器,我为Cheese和Pirate创建了实体......但是,NSFetchRequest似乎只允许您一次检索一种类型的实体:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Cheese" inManagedObjectContext:_context];
[fetchRequest setEntity:entity];

有没有办法执行检索所有“Cheese”和“Pirate”对象的提取?

感谢。

3 个答案:

答案 0 :(得分:28)

您要做的是通过在模型中定义实体继承来完成的, 其中“DisplayableObject”是一个抽象类,被定义为“Cheese”和“Pirate”的父类。

然后,您可以在“DisplayableObject”实体上执行获取请求,它将检索两个实体的对象。

在Apple文档中查看这篇文章:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/KeyConcepts.html

答案 1 :(得分:13)

我也必须处理这个问题。希望能够搜索多个实体,但避免继承,导致所有对象的层次结构都存储在单个核心数据类中,以及可能导致的性能问题。

我选择创建一个具体的Searchable对象,该对象存储我想要搜索的对象中常见的可搜索术语。此对象已添加到我要搜索的每个类中:

Person.Searchable
Employee.Searchable
Department.Searchable

Searchable在searchTerm中有这样的字段,并且与我需要搜索的每个对象有许多关系。还有一个displayName,这样就可以向用户显示信息,而无需查询/加载任何其他表。

针对Searchable执行核心数据查询,因此您只能查询单个实体。

示例:

Person { firstName = Joe, lastName = Jackson } -> searchable { term = joejackson, displayName = Joe Jackson, type = person }
Employee { firstName = Joe, lastName = Smith } -> searchable { term = joesmith, displayName = Joe Smith, type = employee }
Group { name = Joe's Development Team } -> searchable { term = joesdevelopmentteam, displayName = Joe's Development Team, type = group }

现在,您可以使用单个提取请求控制器,使用其可搜索成员列出并搜索Person,Employee,Department所有单独的表。

答案 2 :(得分:1)

Tiago的答案是有效的,但最直接的做法是执行两个单独的获取请求,您可以存储在单独的NSArrays中或附加到一个可变数组。