【问题标题】:Core Data predicate to filter by a subentity attribute按子实体属性过滤的核心数据谓词
【发布时间】:2014-08-27 11:06:54
【问题描述】:

我一直在寻找这个,但我什么也没找到,而且我认为 Core Data 不支持它。无论如何,让我们看看吧:

我有 3 个实体:TicketTicketLineCheffLine

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

[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


【解决方案1】:

好的,我发现没有解决方案。看看这个:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-11
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多