核心数据在不同实体中搜索

时间:2011-11-23 13:52:06

标签: ios search core-data

我在我的应用中使用搜索控制器。用户输入一个单词,然后返回一个核心数据实体列表,其中每个实体都有一个包含该单词的标题。这很容易。

但我还想在此列表的底部返回其他实体,这些实体将搜索词作为其标题,并且与我首先搜索的那些实体存在多种关系。

因此,如果我在标题中找不到搜索词,我想搜索与第一个实体类型相关的实体的标题。

单个NSPredicate可以实现吗?

这是我的核心数据模型

Code Data model diagram

2 个答案:

答案 0 :(得分:5)

另外,你不应该使用单向关系。它们对性能不利,Xcode应该通过对它们的警告来尖叫。不要忽视警告。

对于搜索,我会按照@Felixyz所说的,两次取出并合并结果。如果数据变得庞大,那么您将希望将“搜索标题”拆分为具有关系的单独对象,然后只搜索它。

修复你的人际关系。即使从不使用它们,Core Data也会。

答案 1 :(得分:1)

您有两种类型的实体:TermPart。你想要一个像这样的结构列表:

  • 首先使用Term == title
  • 的所有title个实体
  • 然后所有Part实体title == title

如果这是正确的,您将无法使用一个NSFetchRequest获取列表的两个部分。最简单的方法是执行两次单独的提取,然后将第二个列表附加到第一个列表。如果您为数据添加更多结构,您可以在一个花哨的请求中完成此任务,但据我所知,这是不值得的。如果你有大量的数据,你当然应该考虑巧妙的方法来索引它。