核心数据获取:按关系计数排序

Posted

技术标签:

【中文标题】核心数据获取:按关系计数排序【英文标题】:Core data fetch: Sort by relationship count 【发布时间】:2012-06-20 07:00:45 【问题描述】:

我正在尝试获取其中一个关系中计数最少的实体。该实体称为解决方案,它具有称为 gamesFeaturedIn 的一对多关系,其中链接到 Game 对象。所以我正在这样做(使用 RestKit 便捷方法):

Solution* lowestPlayedSolution = [Solution findFirstWithPredicate: nil sortedBy: @"gamesFeaturedIn.@count" ascending: NO];
NSUInteger lowestPlayedCount = [lowestPlayedSolution.gamesFeaturedIn count];

这会引发错误:

'Keypath 包含不应该有的 KVC 聚合;失败的 处理游戏FeaturedIn.@count'

几年前我发现了一些类似问题的帖子。也许事情已经发生了变化,旧帖子没有给出任何明确的答案来说明如何在不将所有对象提取到内存并手动执行计算的情况下做到这一点。有人吗?

编辑: 核心数据存储是 SQLite 支持的,所以我不能使用瞬态属性进行排序。

【问题讨论】:

【参考方案1】:

很抱歉告诉你这个坏消息,但事情并没有改变,至少在 ios5 中是这样。主要有两种解决方法,都相当不优雅。

    你提到的那个,你在内存中进行排序。 您创建一个非瞬态属性来存储计数并在每次添加或删除关系中的项目时更新它。

【讨论】:

【参考方案2】:

为该属性创建一个临时属性 (relationshipCount) 和一个访问器,您可以在其中返回该关系的计数。您现在可以对此属性进行排序。

【讨论】:

对不起,忘了说这是一个 SQLite 支持的存储。即:无法对瞬态属性进行排序。

以上是关于核心数据获取:按关系计数排序的主要内容,如果未能解决你的问题,请参考以下文章

使用 pandas 在数据帧上执行 groupby,按计数排序并获取 python 中的前 2 个计数

十大经典排序--计数排序及其优化

Laravel Eloquent 按关系计数排序

Sonata Admin Bundle:按计数一对多关系排序

Swift 之计数排序

数据框:如何在 Scala 中分组/计数然后按计数排序