2013-04-18 48 views
0

EntityAEntityB(和EntityBEntityA有一對一的關係)具有多對多關係。我有一個EntityB s(或更準確地說,我有一個NSArray,其中包含NSManagedObject的實例,代表EntityB)。我想創建一個NSFetchRequest,它將獲取與陣列中至少有一個EntityB s有關係的所有EntityA。如何爲此獲取請求編寫謂詞?如何爲與多對多關係中的對象相關的對象編寫核心數據謂詞

以下的工作,但我認爲它是次優的;很難神交,我敢肯定,必須有表達的更好的辦法:

NSArray *entityBs = ...; 
NSMutableArray *containsEntityBSubPredicates = [NSMutableArray new]; 
for (NSManagedObject *entityB in entityBs) { 
    [containsEntityBSubPredicates addObject:[NSPredicate predicateWithFormat:@"%@ IN entityBs", entityB]]; 
} 
NSPredicate *containsEntityBsPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:containsEntityBSubPredicates]; 

我也試過,但它不工作:

NSArray *entityBs = ...; 
NSPredicate *containsEntityBsPredicate = [NSPredicate predicateWithFormat:@"ANY %@ in entityBs", entityBs]; 

我錯過更簡單的解決方案?

回答

1

你幾乎有你的斷言,只需切換參數:

[NSPredicate predicateWithFormat:@"ANY entityBs in %@", entityBArray]; 

看看蘋果的示例代碼與INhere作進一步的解釋。