NSPredicate以获得符合两个条件的关系实体

时间:2017-05-23 22:53:17

标签: ios objective-c core-data nspredicate

我正在使用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]

1 个答案:

答案 0 :(得分:0)

处理子查询之外的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的关系真的令人困惑:它们是相互排斥的概念。