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

我刚刚开始使用核心数据,作为一个学习练习,我正在构build一个应用程序,我需要在单个表视图中显示不同types的对象。

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

因此,使用核心数据编辑器,我已经为Cheese和Pirate创build了实体…但是,NSFetchRequest似乎只允许您一次检索一种types的实体:

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

有没有办法执行一个检索所有“奶酪”和“海盗”对象的提取?

谢谢。

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

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

看看苹果文档中的这篇文章: https : //developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/KeyConcepts.html

我也必须处理这个问题。 希望能够search多个实体,但避免inheritance导致对象的层次结构全部存储在单个核心数据类中,并且可能导致性能问题。

我select创build一个具体的Searchable对象来存储我想要search的对象中常见的可search条件。 这个对象被添加到我想要search的每个类中:

 Person.Searchable Employee.Searchable Department.Searchable 

Searchable在searchTerm中具有这样的字段,并且与我需要search的每个对象有许多关系。 和一个displayName,这样的信息可以显示给用户,而不必查询/加载任何其他表。

Core Data查询是针对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 } 

现在,您可以使用单个获取的请求控制器,使用他们的Searchable成员列出并searchPerson,Employee,Department所有单独的表。

蒂亚戈的答案是有效的,但最直接的方法是执行两个单独的提取请求,您可以存储在单独的NSArrays或追加到一个可变数组。