我正在使用Core Data和NSFetchedResultsController
。
我的数据模型如下所示:
Product
名为dataLines
的一对多关系。
dataLine
实体的属性名称为theWeek
。
我想要获取所有Product
dataLines.theWeek == someValue
。使用子查询可以轻松完成此操作。但是这会返回所有dataLines。是否可以创建一个返回NSPredicate
的{{1}}和一个只有Product
的dataLines的子集?
答案 0 :(得分:8)
您希望通过两种方式达成目标:
使用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 ...
。
也许如果你分享一些代码,我们可以帮助你。
P.S。我想你不使用标量值,而theWeek
是一个数字。
希望它有所帮助。
答案 1 :(得分:1)
您应该获取dataLine
属性。
假设您的Product
和dataLine
实体按关系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
即可在表格视图中调用或显示您的产品
答案 2 :(得分:0)
为“产品”实体创建获取请求:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity: [NSEntityDescription entityForName:@"Product" ...]]
然后使用带有'ANY'的Product的属性/属性创建谓词:
[fetchRequest setPredicate:
[NSPredicate predicateWithFormat:@"ANY dataLines.theWeek == %@", <whatever week>]];
然后执行fetch以获取至少有一个<whatever week>
的Product数组。
通常可以参阅“获取托管对象”,NSPredicate和相关文档。