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

qua*_*rac 5 core-data subquery nspredicate nsfetchedresultscontroller ios

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

我有3个实体:Ticket,TicketLineCheffLine.

故障单包含多个TicketLines(Ticket.lines).**CheffLine**继承自TicketLine.

现在我想获取票证(通过a NSFetchedResultsController),但过滤至少有一个CheffLine cheffStatus 大于0的票证.问题是这cheffStatusCheffLine实体的属性,所以我做了这个谓词:

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

但是当执行时,我收到此错误:

由于未捕获的异常'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)"];
Run Code Online (Sandbox Code Playgroud)

有没有办法做这个查询?请记住,它必须在一个内部工作NSFetchedResultsController.

qua*_*rac 4

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

如何在父实体的获取请求的谓词中引用子实体名称?

正确的方法是在 2 个单独的请求中获取结果,然后手动合并,因此请忘记 NSFetchedResultsController。