无法想出一个能够获得我想要的实体的NSPredicate吗?

时间:2011-08-19 17:17:30

标签: iphone core-data subquery nspredicate

我有一个包含三个实体的数据模型,如下所示:

Event:
id
startTime
->>invitees

User:
id
type
->>invitations  (Invitees entity)

Invitees:
rsvpState
->user
->event

- > =一对一的关系

- >> =太多的关系

我要做的是创建一个谓词,该谓词返回某个类型和id的用户rsvp为“Y”并且startTime比现在更大的所有事件。我到目前为止最接近的是:

SUBQUERY(invitees.user,$ x,$ x.id ==%i AND $ x.type ==%i).invitations.rsvpState ==%@ AND startTime> %@

虽然我仍然得到奇怪的结果,但这并没有给我任何错误。我想我不完全理解子查询是如何工作的。

  1. 例如,在执行.invitations.rsvpSate ==%@时,检查传递谓词的所有用户是否具有invitation.rsvpState ==“Y”,还是检查生成的用户集合以查看是否其中任何一个都有邀请.rsvpState ==“Y”。

  2. 添加startTime> %@到查询结束时检查所有结果事件是否有startTime> %@或结果中的任何事件都有一个startTime> %@

  3. Thx

1 个答案:

答案 0 :(得分:2)

使用NSCompoundPredicate的评论可能比SUBQUERY更容易。它可以帮助您分解查询并提高可读性。

至于你的2个问题,答案总是全部。如果您需要“any”,还有谓词关键字ANY

假设id User是唯一的,您不需要type属性。此外,我不确定您确实需要复合谓词或子查询。请尝试:

startTime > %@ AND invitees.user.id == %i AND invitees.rsvpState == %@