0
期間過濾結果

我希望有一個簡單謂詞返回我所有具有模式= 0,入學的組中的模式的組= 0NSPredicate嵌套的對象上/ NSSet中到NSFetchRequest

爲了精確我需要一個謂詞來訪問嵌套的對象屬性。 不知怎的,一個謂語,如:

[NSPredicate predicateWithFormat:@"mode = 0 AND enrollments.Enrollment.mode = 0"] 

上述斷言是錯誤的,顯然是行不通的。

編輯:

我給一個去以下謂詞太多,但沒有成功。

[NSPredicate predicateWithFormat:@"mode = 0 AND ALL (SUBQUERY(enrollments,$varEnrollment,$varEnrollment.mode = 0))"] 

我需要得到其包含的所有活動組(group.mode = 0),並與所有登記者的是有效的(enrolles.mode = 0) 但對我這個謂詞不起作用。

+0

一個組有很多註冊,所以「組中的註冊模式= 0」意味着什麼? – 2012-08-13 13:09:07

+0

我需要在enrollment.mode上應用過濾器,以便它能反映出所有結果。 – yunas 2012-08-13 13:10:44

+0

正如我所說,如果我正確閱讀圖表,一個組有多個註冊。你的意思是「模式= 0爲所有組的登記」? – 2012-08-13 13:16:22

回答

5

從你的問題,我猜評論要

[NSPredicate predicateWithFormat:@"mode = 0 AND (ALL enrollments.mode = 0)"] 

UPDATE

看來,所有集合不起作用。它拋出

'NSInvalidArgumentException', reason: 'Unsupported predicate (null)' 

as @yunas注意到。之前也已經注意到這一點,例如

在另一方面,任何集合工作得很好。因此,作爲一個替代方法,可以用等效全部替換任何表情:

[NSPredicate predicateWithFormat:@"mode = 0 AND NOT(ANY enrollments.mode != 0)"]; 

這實際工作(我測試)!

UPDATE 2

在討論過程中它已經很清楚,yunas想要與一行中顯示一個表的每個組與模式= 0,並且錶行顯示內與模式該組的所有入學= 0。

第一個解決方案(可能是更好的一個):首先用上面給出的方法找出所有可接受的組。對於每一行(在cellForRowAtIndexPath:中),過濾該組的註冊並繪製單元格。

第二種解決方案:獲取所有註冊並按組進行排序。這隻需要一個提取請求,但結果不如表視圖數據源適合。取回請求如下所示:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Enrollment"]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"mode = 0 AND group.mode = 0"]; 
request.predicate = predicate; 
NSSortDescriptor *sort1 = [NSSortDescriptor sortDescriptorWithKey:@"group.name" ascending:YES]; 
NSSortDescriptor *sort2 = [NSSortDescriptor sortDescriptorWithKey:@"share" ascending:YES]; 
request.sortDescriptors = [NSArray arrayWithObjects:sort1, sort2, nil]; 
+0

我們可以做(ALL enrollments.mode = 0)???我遇到的問題是,我不知道如何訪問嵌套的對象屬性。 – yunas 2012-08-13 13:27:02

+0

我不會給這個答案我不相信它是正確的。你應該現在嘗試,如果它的工作。如果有效:好,接受我的回答。如果沒有:顯示你的代碼並再次詢問。 – 2012-08-13 13:47:01

+0

你也可以看看[Predicate Programming Guide](http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Conceptual/Predicates/predicates.html#//apple_ref/doc/uid/) TP40001798-SW1)。它有一些例子,比如「ALL children.age> 12」。 – 2012-08-13 13:51:54