2012-07-09 79 views
0

我有以下數據模型:核心數據謂詞:在NSDate上有活動的所有組?

Group(name, color, activities*) // one group may have many activities 
Activity(startTime, endTime, location, Group*) // startTime and endTime are NSDate, group is an inverse relationship 

所以如果我想要得到誰擁有這對指定的NSDate,說theTime,我應該構建什麼樣的斷言至少一個活動的所有組?

我的想法:

  1. 首先獲得所有活動
  2. 然後把它們組爲一組,以消除重複的組
  3. 轉換設置爲一個數組

這樣:

[NSPredicate predicateWithFormat:@"%@ >= startTime AND %@ <= endTime", theTime] 

取活動的一個數組,那麼:

for (Activity *activity in activities) 
{ 
    [theSet add:activity.group]; 
} 

,所以我得到了有theTime至少一個活動的獨特組的陣列?

是否有任何其他方式只做一個沒有後處理的提取?

謝謝!

編輯:

我可以這樣做:

[NSPredicate predicateWithFormat:@"%@ >= activities.startTime AND %@ <= activities.endTime", theTime] 

???

回答

0

如果我明白你的問題,是的。

您可以對Group而不是Activity實體執行此操作。以這種方式,您可以避免獲取第一個實體,然後應用過濾器。由於activities不是標量值,因此需要謂詞修飾符(ANY,ALL等)或SUBQUERY。

關於您的問題,我會做到以下幾點:

[NSPredicate predicateWithFormat:@"(SUBQUERY(activities, $x, $x.startTime >= %@ and $x.endTime <= %@)[email protected] > 0)", theStartTime, theEndTime]; 

關於謂語,我想宥要查找包含包含在specificified範圍Activity IES Group秒。

試着讓我知道。希望有所幫助。