NSPredicate,获得一个一对多关系的子集的结果

我没有解决与核心数据和NSFetchedResultsController

我的数据模型看起来像这样:

具有一对多关系的产品称为dataLinesdataLine实体有一个属性名称theWeek

我想获取dataLines.theWeek == someValue所有Product 。 这很容易通过子查询完成。 但是这将返回所有dataLines。 是否有可能创build一个NSPredicate返回Product和一个子集,如果dataLines只与dataLines == someValue

你想达到什么可以通过两种方式达到:

使用SUBQUERY

 [NSPredicate predicateWithFormat:@"SUBQUERY(dataLines, $x, $x.theWeek == %@).@count > 0)", [NSNumber numberWithInt:18]]; 

或ANY修饰符

 [NSPredicate predicateWithFormat:@"ANY dataLines.theWeek == %@", [NSNumber numberWithInt:18]]; 

如果您需要检查多个值,则还可以执行以下操作:

 [NSPredicate predicateWithFormat:@"SUBQUERY(dataLines, $x, $x.theWeek == %@ or $x.theWeek == %@).@count > 0)", [NSNumber numberWithInt:18], [NSNumber numberWithInt:19]]; 

同样可以应用于ANY修饰符。 ANY ... OR ANY ...

也许如果你分享一些代码,我们可以帮你。

PS我想你不使用标量值和theWeek是一个数字。

希望能帮助到你。

你应该获取dataLine属性。 假设你的ProductdataLine实体通过关系someRelation连接,那么你可以尝试这个代码;

 NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; [fetchRequest setEntity:[NSEntityDescription entityWithName:@"dataLine" inManagedObjectContext:self.managedObjectContext]]; [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"dataLines.week == %@",theWeek]]; NSMutableArray *tmpProduct [[NSMutableArray init] alloc]; NSMutableArray *tmpArray = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error]; for (dataLine *theDataLine in tmpArray); NSLog(@"%@",theDataLine.someRelation.name); tmpProduct = theDataLine.someRelation.name; 

那么你可以调用tmpProduct来调用或在表格视图中显示你的产品

为“产品”实体创build一个提取请求:

 NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; [fetchRequest setEntity: [NSEntityDescription entityForName:@"Product" ...]] 

然后使用“ANY”产品的属性/属性创build谓词:

 [fetchRequest setPredicate: [NSPredicate predicateWithFormat:@"ANY dataLines.theWeek == %@", <whatever week>]]; 

然后执行获取以至less得到一个<whatever week>的产品数组。

一般见“获取pipe理对象”,NSPredicate和相关文档。