核心数据谓词按子实体属性进行过滤

时间:2014-08-27 11:06:55

标签: ios core-data subquery nspredicate nsfetchedresultscontroller

我一直在寻找这个,但我一无所获,我认为它不受Core Data的支持。无论如何,让我们看看它:

我有3个实体:TicketTicketLineCheffLine

A Ticket contains multiple TicketLines (Ticket.lines). **CheffLine** inherits from TicketLine.

现在我想要获取门票(通过NSFetchedResultsController),但过滤至少有一个cheffStatus 大于0 的CheffLine的门票。问题是cheffStatusCheffLine实体的属性,因此我创建了这个谓词:

[NSPredicate predicateWithFormat:@"0 != SUBQUERY(lines, $x, $x.cheffStatus > 0).@count)"];

但是当执行时,我收到了这个错误:

  

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'无法为谓词生成SQL(0!= SUBQUERY(行,$ x,$ x.cheffStatus> 0)。@ count)(RHS上的问题) “

我注意到,如果使用$x.someVariableInTheTicketLineEntity代替$x.cheffStatus完成查询,则可以正常运行。我也尝试使用CAST,但获得了相同的结果

[NSPredicate predicateWithFormat:@"0 != SUBQUERY(lines, $x, CAST($x, 'CheffLine').cheffStatus > 0).@count)"];

有没有办法进行此查询?请记住,它必须在NSFetchedResultsController内完成。

1 个答案:

答案 0 :(得分:4)

好的,我发现没有解决办法。看看这个:

How can you reference child entity name in a predicate for a fetch request of the parent entity?

要做的是在2个单独的请求中获取结果然后手动合并,所以忘记NSFetchedResultsController。