任何一对多一对多谓词

问题描述:

我能得到像任何一对多一对多谓词

ANY alpha.prop LIKE $SEARCH_TERM 

谓语为工作在阿尔法是一个一对多的关系,但是我如何才能

ANY alpha.beta.prop LIKE $SEARCH_TERM 

要工作alpha是一对多的关系,并且beta是一对多关系alpha,这会引发异常'多对多密钥不允许在这里'。

+0

您是否在核心数据中设置了这种关系的反转? – 2012-08-10 07:52:48

确定的方式要做到这一点是做底子元素的搜索代替查询字符串变成

prop LIKE $SEARCH_TERM 

,然后通过结果枚举并抓住父母的父母把它们粘在一套删除重复,像

NSMutableSet * mySet = [NSMutableSet set]; 
for(MyChild * c in [self.managedObjectContext executeFetchRequest:theFetchRequest error:&theError]) 
{ 
    [mySet addObject:c.parent.parent]; 
} 

你可以分两步做。让我们假设bABc一个一对多的关系是从B一个一对多的关系C,那么你可以先获取该相关的任何C对象具有所需性能的所有B对象:

NSFetchRequest *request1 = [NSFetchRequest fetchRequestWithEntityName:@"B"]; 
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"ANY(c.prop) LIKE %@", searchTerm]; 
request1.predicate = predicate1; 
NSArray *bList = [context executeFetchRequest:request1 error:NULL]; 

然后取被从中间结果与任何B对象的所有对象A

NSFetchRequest *request2 = [NSFetchRequest fetchRequestWithEntityName:@"A"]; 
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"ANY(b) IN %@", bList]; 
request2.predicate = predicate2; 

NSArray *aList = [context executeFetchRequest:request2 error:NULL];