核心数据搜索以多对多关系

时间:2013-10-10 11:58:38

标签: ios search core-data nspredicate

我是Core数据的新手,我在搜索时遇到了麻烦。

我的数据结构如下所示:

Server   --one-to-many-->   Category   --many-to-many-->   Cube

我的想法是获取服务器对象,获取server.category集并绘制其立方体。

现在我需要在这个模型中搜索。我想按立方体名称搜索并获取:

包含此名称的多维数据集的服务器对象指定类别(或该名称包含此单词)。

我是这样想的:

NSPredicate * defaultPredicate = [NSPredicate predicateWithFormat:@"ANY SELF.defaultFlag = %@ AND ANY SELF.category.cube.title = %@", [NSNumber numberWithInt:1], text];

但是它给了我一个

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'multiple to-many keys not allowed here'

如何做到这一点。

编辑:

如果我有例如: 一个服务器DemoServer whit 3 Category(Category1,Category2,Category3)和那些类别各有3个立方体(Test,cube11,cube12),(cube21,cube22,cube23),(Test,Cube32,Test)

我搜索:测试(立方体标题)我想得到

DemoServer whit 2类别(Category1,Category3)和那些将有多维数据集(Test),(Test,Test)

1 个答案:

答案 0 :(得分:0)

嵌套到多个关系的谓词有点复杂。  “明显的”谓词

[NSPredicate predicateWithFormat:@"ANY category.cube.title = %@", text]
如果“类别”和“立方体”都是多对子关系,则

不起作用。

您需要的是一个子信息:

[NSPredicate predicateWithFormat:@"SUBQUERY(category, $cat, ANY $cat.cube.title = %@).@count > 0", text]

结合您的其他谓词:

[NSPredicate predicateWithFormat:@"defaultFlag = %@ AND SUBQUERY(category, $cat, ANY $cat.cube.title = %@).@count > 0",
        [NSNumber numberWithInt:1], text]