2011-08-19 41 views
0

我有三個實體,其看起來像數據模型:不能拿出一個NSPredicate來獲取我想要的實體嗎?

Event: 
id 
startTime 
->>invitees 

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

Invitees: 
rsvpState 
->user 
->event 

- > =一對一關係

- >> =太一對多的關係

什麼,我試圖做的是創建一個謂詞,該謂詞返回某個類型和id的用戶具有rsvp'd「Y」並且startTime大於現在的所有事件。最近我到目前爲止是:

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

雖然我仍然得到奇怪的結果,但這不會給我任何錯誤。我想我沒有完全理解子查詢是如何工作的。

  1. 例如做.invitations.rsvpSate當==%@是檢查誰通過了謂詞所有用戶具有invitation.rsvpState ==「Y」或它檢查導致用戶的集合,看看如果它們中的任何一個具有invitation.rsvpState ==「Y」。

  2. 通過將startTime>%@添加到查詢的末尾來檢查所有結果事件是否具有startTime>%@,或者結果中的任意事件是否具有startTime>%@?

THX

回答

2

也許是更容易使用NSCompoundPredicate小號評價者比SUBQUERY。它可以幫助你分解你的查詢並且更具可讀性。

至於你的2個問題,答案總是全部。如果您需要「任何」,還有謂詞關鍵字ANY

假設idUser是唯一的,您不需要type屬性。另外,我不確定您是否確實需要複合謂詞或子查詢。請嘗試:

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

它工作嗎?考慮按下接受刻度標記。 – Mundi

相關問題