【问题标题】:NSPredicate to get entity of a relationship matching two conditionsNSPredicate 获取匹配两个条件的关系实体
【发布时间】:2017-05-23 22:53:16
【问题描述】:

我正在使用Core Data 来获取实体。我只需要获取具有attribute 关系且 ID 为 41 的实体,并且相同的 attribute 需要将 isOn 属性设置为 YES。

这是我正在尝试的:

[NSPredicate predicateWithFormat:@"(SELF IN %@ AND ANY attributes.attributeID.intValue == 41) AND (SELF IN %@ AND ALL attributes.isOn == %@)", self.places, self.places, @YES];

由于某种原因,我的应用程序崩溃了,没有解释。

关于我的谓词格式是否错误的任何想法?

编辑:

做更多研究似乎我需要使用SUBQUERY,但不太确定在这种情况下如何使用。这是我尝试过的,但它也因“无法解析格式”错误而崩溃:

[NSPredicate predicateWithFormat:@"SUBQUERY(SELF IN %@, $e, $e.attributes.attributeID.intValue == %i && $e.attributes.isOn == %@).@count > 0)", self.places, 41, @YES]

【问题讨论】:

  • “崩溃”是什么意思?你有堆栈跟踪吗?
  • @AminNegm-Awad 不,没有堆栈跟踪。

标签: ios objective-c core-data nspredicate


【解决方案1】:

在子查询之外处理SELF IN,因为它与正在评估/获取的实体有关,而不是相关实体,而且您的 SUBQUERY 格式也有点错误:

[NSPredicate predicateWithFormat:@"SELF IN %@ AND (SUBQUERY(attributes, $e, $e.attributeID.intValue == %i && $e.isOn == %@).@count > 0)", self.places, 41, @YES]

另外,我希望您的关系名称attributes 仅用于此问题的演示目的。如果没有,我建议更改它。有一个名为attributes 的关系真的很令人困惑:它们是相互排斥的概念。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    相关资源
    最近更新 更多