【问题标题】:Core Data Many-to-Many Relationship NSPredicate核心数据多对多关系 NSPredicate
【发布时间】:2011-02-18 20:09:55
【问题描述】:

我有一个像EntityA <-->> EntityB <<--> EntityC 这样的多对多关系的数据模型。我曾经使用不同的搜索条件查询EntityA,我使用NSCompoundPredicateNSPredicates 数组。在一个谓词上,我想使用EntityC 查询EntityA。我尝试使用以下SUBQUERY,但它不起作用。

searchPredicate=[NSPredicate predicateWithFormat:@"(0 != SUBQUERY(EntityB, $B, (0 != SUBQUERY($B.EntityC, $EntityC, $EntityC.name like %@).@count)).@count)", name]

我得到了以下异常,

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因: '无法对非收集对象执行收集评估。'

我有什么遗漏的吗?我将不胜感激。

莎拉

【问题讨论】:

    标签: iphone core-data many-to-many nspredicate


    【解决方案1】:

    (我在想出你的谓词时遇到了很多麻烦,所以请谨慎对待。)

    我认为你把这个弄得太复杂了。您应该使用键路径进行简化。每个 EntityB 与 EntityC 具有一对一的关系,因此要搜索 EntityB 对象,您只需检查EntityB.entityCRelationshipName.entityCAttribute。所以像:

    ALL B.EntityC.name like %@
    

    无论如何,(如果我正确阅读谓词的话)这个:

    SUBQUERY($B.EntityC, $EntityC, $EntityC.name like %@)
    

    只能返回单个对象而不是集合。因此,谓词将无法对其执行计数。这就是您的错误消息的含义。

    我建议在存储谓词之前使用数据模型编辑器中的谓词编辑器对谓词进行散列。

    【讨论】:

    • 感谢您的回复,我之前使用过您的方法,但出现以下异常 *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“不支持的谓词 ALL B.EntityC.name LIKE” name"' 并且我使用谓词编辑器来构建它。
    • 尝试ANY entityB.entityC.name LIKE[c] $aName 并提供“aName”变量。确保您的关系名称与实体名称不同。
    • ANY entityB.entityC.name LIKE[c] $aName 效果很好,谢谢
    猜你喜欢
    • 2012-03-08
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    相关资源
    最近更新 更多