NSFetchRequest GroupBy 一对多关系的属性

Posted

技术标签:

【中文标题】NSFetchRequest GroupBy 一对多关系的属性【英文标题】:NSFetchRequest GroupBy an attribute of to-many relationship 【发布时间】:2015-09-01 10:17:09 【问题描述】:

我一直在核心数据中保留一些记录。 记录具有多对多关系。 通过对多关系搜索持久数据似乎很简单,我使用“SUBQUERY”来实现它。我在分组记录方面遇到问题。

我需要按“ZCMORecordValue”的字符串值对“ZCMORecord”进行分组

因为“ZCMORecordValue”是一对多关系。

我什至需要用一个或多个“ZCMORecordValue”对 ZCMORecords 进行分组。

NSManagedObjectContext *context= [[[UIApplication sharedApplication]delegate ]managedObjectContext];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *valueDesc = [NSEntityDescription entityForName:@"ZCMORecord" inManagedObjectContext:context];    

[fetchRequest setResultType:NSDictionaryResultType];
[fetchRequest setFetchLimit:PAGE_SIZE];

NSPropertyDescription *recordRelationShip = [fetchRequest.entity.relationshipsByName objectForKey:@"recordValueSet.stringValue"];

[fetchRequest setPropertiesToGroupBy:[NSArray arrayWithObjects:recordRelationShip,nil]];
NSError *error;
id fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

尝试此操作时出现错误。

带有 GROUP BY 组件的查询中的 SELECT 子句只能包含 在 GROUP BY 或聚合函数中命名的属性

我需要分组获取记录。 我不知道在“setPropertiesToGroupBy:”和“setHavingPredicate:”中设置什么来获得正确的结果。

好的!我如何存储数据的示例

ZCMORecordValues


id    stringValue<NSString>  dateValue<NSDate>     record


name     Alex                     -            record1<ZCMORecord>

DOB      -                     10/10/1990      record1<ZCMORecord>

name     Anto                     -            record2<ZCMORecord>

DOB      -                     05/05/1990      record2<ZCMORecord>

name     Max                     -            record3<ZCMORecord>

DOB      -                     10/10/1990      record3<ZCMORecord>

name     Mary                     -            record4<ZCMORecord>

DOB      -                     01/01/1990      record4<ZCMORecord>

现在我想根据 DOB 对“ZCMORecord”进行分组。

也欢迎任何关于更改模型以促进分组的建议

【问题讨论】:

你如何按多个事物进行图像分组工作?您需要展示您正在寻找的结果的示例,我猜您需要在获取后执行此操作(或将其他信息添加到模型中以方便) @Wain 可以说我按一件事分组。我怎样才能让它工作。如何设置havePredicate 和propertiesToGroupBy?获取后我不能做,因为我有大量的记录。 那一件事将在实体本身上,而不是在一对多关系结束时的实体 因此未完成按对多关系分组:s。好的!!为了按多个事物分组,我编辑了我的问题。我该怎么做。 @Wain 只需按数组在组中指定这些属性名称(您的问题不再与您的托管对象模型相关,因此现在很难说具体的内容) 【参考方案1】:

最简单的方法是使用NSFetchedResultsController,获取记录值并将stringValue 作为sectionNameKeyPath 传递。

【讨论】:

我需要同时对 dateValve 和 stringValue 进行分组 您可以通过获取的结果控制器执行第一个,第二个在内存中执行。如果您能解释您的用例,这也会有所帮助 - 我怀疑这是合理的。 我更改了我的问题以便更好地理解。请提出一种我可以通过获取结果控制器@Mundi 进行分组的方法 我不能在 sectionNameKeyPath 中给出 stringValue 或 dateValue 因为它也需要那些空条目。 (我只想要它如何指定“仅”要考虑分组的实体)

以上是关于NSFetchRequest GroupBy 一对多关系的属性的主要内容,如果未能解决你的问题,请参考以下文章

用于 groupby 和 count 组合的 NSFetchRequest

设置一对多关系后,NSFetchRequest 查询返回 nil

排除某些对象的一对多关系上的 NSFetchRequest 无法按预期工作

根据一对多关系中的属性对 NSFetchRequest 进行排序?

NSFetchRequest 具有一对一关系属性 == YES 谓词错误地获取每个实体

NSFetchRequest / 谓词问题