【发布时间】:2014-08-27 11:06:54
【问题描述】:
我一直在寻找这个,但我什么也没找到,而且我认为 Core Data 不支持它。无论如何,让我们看看吧:
我有 3 个实体:Ticket、TicketLine 和 CheffLine。
现在我想获取票(通过NSFetchedResultsController),但过滤至少有一个具有cheffStatus大于0的CheffLine的票。问题是cheffStatus是CheffLine实体的一个属性,所以我做这个谓词:
[NSPredicate predicateWithFormat:@"0 != SUBQUERY(lines, $x, $x.cheffStatus > 0).@count)"];
但是当执行时,我得到这个错误:
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“无法为谓词 (0 != SUBQUERY(lines, $x, $x.cheffStatus > 0).@count) 生成 SQL(RHS 上的问题)”
我注意到,如果使用$x.someVariableInTheTicketLineEntity 而不是$x.cheffStatus 完成查询,它可以工作。我也尝试使用 CAST,但得到了相同的结果
[NSPredicate predicateWithFormat:@"0 != SUBQUERY(lines, $x, CAST($x, 'CheffLine').cheffStatus > 0).@count)"];
有没有办法做这个查询?请记住,它必须在 NSFetchedResultsController 中工作。
【问题讨论】:
-
我没有看到任何解决方案,因此我将通过更改我的获取请求以直接获取 CheffLine 对象来解决此问题,然后在 NSFetchedResultsController 委托函数中完成所有艰苦的工作跨度>
-
它适用于这种情况,但现在我遇到了另一个与 CheffLine 的其他子实体相同的问题。我认为要走的路是不在 Core Data 中使用子实体,目前这对我来说是不可能的。
标签: ios core-data subquery nspredicate nsfetchedresultscontroller