Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSPredicate,使用一对多关系的子集获取结果_Ios_Core Data_Nspredicate_Nsfetchedresultscontroller_Nsfetchrequest - Fatal编程技术网

Ios NSPredicate,使用一对多关系的子集获取结果

Ios NSPredicate,使用一对多关系的子集获取结果,ios,core-data,nspredicate,nsfetchedresultscontroller,nsfetchrequest,Ios,Core Data,Nspredicate,Nsfetchedresultscontroller,Nsfetchrequest,我正在处理核心数据和NSFetchedResultsController 我的数据模型如下所示: 产品具有一对多关系,称为数据线。 dataLine实体有一个属性名theWeek 我想获取所有Productwheredataline.theWeek==someValue。这可以通过子查询轻松完成。但这会返回所有数据线。是否可以创建一个NSPredicate,返回产品,如果数据线仅具有数据线==someValue,是否可以创建一个子集?为“产品”实体创建一个提取请求: NSFetchRequest

我正在处理核心数据和
NSFetchedResultsController

我的数据模型如下所示:

产品
具有一对多关系,称为
数据线
dataLine
实体有一个属性名
theWeek


我想获取所有
Product
where
dataline.theWeek==someValue
。这可以通过子查询轻松完成。但这会返回所有数据线。是否可以创建一个
NSPredicate
,返回
产品
,如果数据线仅具有
数据线==someValue
,是否可以创建一个子集?

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

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity: [NSEntityDescription entityForName:@"Product" ...]]
然后使用带有“ANY”的产品属性创建谓词:

[fetchRequest setPredicate:
  [NSPredicate predicateWithFormat:@"ANY dataLines.theWeek == %@", <whatever week>]];
[fetchRequest setPredicate:
[NSPredicate predicateWithFormat:@“ANY dataLines.theWeek==%@”,];
然后执行fetch以获取至少包含一个
的产品数组

一般请参见“获取托管对象”、NSPredicate和相关文档。

您应该取而代之的是获取
dataLine
属性。 假设您的
产品
数据线
实体通过关系
someRelation
连接,那么您可以尝试此代码

NSFetchRequest*fetchRequest=[[NSFetchRequest alloc]init];
[fetchRequest setEntity:[NSEntityDescription entityWithName:@“dataLine”inManagedObjectContext:self.managedObjectContext]];
[fetchRequest setPredicate:[NSPredicate Predicate WithFormat:@“dataLines.week==%@”,theWeek]];
NSMutableArray*tmpProduct[[NSMutableArray init]alloc];
NSMUTABLEARRY*tmpArray=[self.managedObjectContext executeFetchRequest:fetchRequest错误:&错误];
用于(数据线*tmpArray中的数据线);
NSLog(@“%@”,theDataLine.someRelation.name);
tmpProduct=theDataLine.someRelation.name;

然后,您只需调用
tmpProduct
即可在表视图中调用或显示您的产品

可以通过两种方式实现您想要实现的目标:

使用子查询

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

[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]];
这同样适用于
任何
修饰符<代码>任何。。。或任何…

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

另外,我想你不用标量值,
theWeek
是一个数字


希望有帮助。

这基本上就是我现在正在做的事情。问题是这会返回包含所有数据线的所有产品。我想要的是:带有dataLines.theWeek=18和dataLines.theWeek=19的产品A。我只想返回带有数据线的产品A。theWeek=18。而不是数据线。theWeek=19。是否可能?不清楚-此产品是同一对象吗?如果是,很难理解您的问题您希望获取的产品有一条且只有一条数据线,例如Week=18?请提供一些代码或添加一些详细信息。谢谢。另外,您能解释一下您的意思吗?如果数据线仅具有dataLines==someValue,是否可以创建一个NSPredicate来返回产品和子集?这与你第一部分问题的目标是否相同?