2012-11-27 35 views
0

我需要使用與另一個實體的關係與另一個實體的關係的實體進行謂詞。這可能嗎?我有以下實體:如何構建引用關係中實體的謂詞?

Entity: BOOK 
Entity: AUTOR 
Entity: SCHOOL 

而且這些關係:

BOOK -> relationAutor <- AUTOR 
AUTOR -> relationSchool <- SCHOOL 
SCHOOL -> attribute "country" 

所以,我需要過濾/取一些書,從一個特定的country。因爲我有從實體書,屬性country(從實體SCHOOL)通過實體AUTOR有一定的關係,我試圖來連接這個謂詞:

NSString *pred = [[NSPredicate predicateWithFormat:@"relationAutor.relationSchool.country IN %@",[countries valueForKey:@"country"]]predicateFormat]; 
predicateFormat = [predicateFormat stringByAppendingFormat:@" AND (%@)",pred]; 

但我的代碼崩潰:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unimplemented SQL generation for predicate : (relationAutor.relationSchool.country IN {France})' 

我試圖做甚至可能嗎?如果是這樣,我將如何構建這樣一個謂詞?

回答

0

您不能通過字符串連接組合謂詞。如果需要謂詞是2(或更多)其他謂詞的「與」組合,則使用NSCompoundPredicate,例如,

NSArray *countries = @[@"France"]; 
NSPredicate *pred1 = [NSPredicate predicateWithFormat:@"relationAutor.relationSchool.country IN %@", countries]; 
NSPredicate *pred2 = ... // other predicate 

// pred = pred1 AND pred2: 
NSPredicate *pred = [NSCompoundPredicate andPredicateWithSubpredicates:@[pred1, pred2]]; 

又見了predicateFormat的文檔:

此方法返回的字符串是不能保證是相同的 用於使用predicateWithFormat創建謂詞的字符串:等 你不能使用此方法可創建可用於重新創建原始謂詞的謂詞的持久表示。

+0

其實,我把另一個謂詞結合起來,一切都很好。我的其他謂詞很簡單,只有一個關係,但是有了這個謂詞,有兩個關係,代碼崩潰 – user1600801

+0

@ user1600801:您的代碼崩潰了還是我建議的代碼? - 我更新了我的答案,提供了更多信息。如果您顯示完整的代碼,如何創建和組合謂詞,則更容易提供幫助。 –

相關問題