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 进行排序?